Skip to content

Instantly share code, notes, and snippets.

@ThiagoBarradas
Last active May 28, 2020 02:41
Show Gist options
  • Save ThiagoBarradas/bc845ca918be6002a707819806c548fe to your computer and use it in GitHub Desktop.
Save ThiagoBarradas/bc845ca918be6002a707819806c548fe to your computer and use it in GitHub Desktop.
from __future__ import print_function
import requests
import sys
import time
import os
def main():
trigger_url = sys.argv[1]
access_token = sys.argv[2]
trigger_resp = requests.get(trigger_url)
if trigger_resp.ok:
trigger_json = trigger_resp.json().get("data", {})
test_runs = trigger_json.get("runs", [])
message = "Started " + str(len(test_runs)) + " test runs."
print(message)
results = {}
while len(results.keys()) < len(test_runs):
time.sleep(2)
for run in test_runs:
test_run_id = run.get("test_run_id")
if not test_run_id in results:
result = _get_result(run, access_token)
if result == None:
print("Test aborted!")
exit(1)
if result.get("result") == "fail":
print(_get_failed_test_feedback_message(result))
results[test_run_id] = result
if result.get("result") == "pass":
results[test_run_id] = result
pass_count = sum([r.get("result") == "pass" for r in results.values()])
fail_count = sum([r.get("result") == "fail" for r in results.values()])
if fail_count > 0:
message = str(pass_count) + " test runs passed. " + str(fail_count) + " test runs failed."
print(message)
exit(1)
print("All test runs passed.")
def _get_result(test_run, access_token):
opts = {
"base_url": "https://api.runscope.com",
"bucket_key": test_run.get("bucket_key"),
"test_id": test_run.get("test_id"),
"test_run_id": test_run.get("test_run_id")
}
result_url = "{base_url}/buckets/{bucket_key}/tests/{test_id}/results/{test_run_id}".format(**opts)
message = "Getting result " + result_url
print(message)
auth = "Bearer " + access_token
headers = {
"Authorization": auth,
"User-Agent": "python-trigger-sample"
}
while True:
result_resp = requests.get(result_url, headers=headers)
if result_resp.status_code == 404:
print("result not available yet...")
time.sleep(5)
else:
break
if result_resp.ok:
return result_resp.json().get("data")
if result_resp.status_code == 403:
print("403 FORBIDDEN!");
return None
def _get_failed_test_feedback_message(result):
test_id = result.get("test_id")
test_run_id = result.get("test_run_id")
bucket_key = result.get("bucket_key")
failed_test_url = "https://www.runscope.com/radar/{bucket_key}/{test_id}/history/{test_run_id}".format(bucket_key=bucket_key, test_id=test_id, test_run_id=test_run_id)
message = "Test failed: URL: {failed_test_url}".format(failed_test_url=failed_test_url)
return message
if __name__ == '__main__':
main()
@gabrielclima
Copy link

@ThiagoBarradas, coloquei um feedback no script pra poder saber qual foi o teste que falhou. Segue o código:

from __future__ import print_function
import requests
import sys
import time
import os


def main():
    trigger_url = sys.argv[1]
    access_token = sys.argv[2]
    trigger_resp = requests.get(trigger_url)

    if trigger_resp.ok:
        trigger_json = trigger_resp.json().get("data", {})

        test_runs = trigger_json.get("runs", [])

        message = "Started " + str(len(test_runs)) + " test runs."
        print(message)

        results = {}
        while len(results.keys()) < len(test_runs):
            time.sleep(1)

            for run in test_runs:
                test_run_id = run.get("test_run_id")
                if not test_run_id in results:
                    result = _get_result(run, access_token)
                    
                    if result == None:
                        print("Test aborted!")
                        exit(1)
                    
                    if result.get("result") == "fail":
                        print(_get_failed_test_feedback_message(result))
                        results[test_run_id] = result

                    if result.get("result") == "pass":
                        results[test_run_id] = result

        pass_count = sum([r.get("result") == "pass" for r in results.values()])
        fail_count = sum([r.get("result") == "fail" for r in results.values()])

        if fail_count > 0:
            message = str(pass_count) + " test runs passed. " + str(fail_count) + " test runs failed."
            print(message)
            exit(1)

        print("All test runs passed.")


def _get_result(test_run, access_token): 
    opts = {
        "base_url": "https://api.runscope.com",
        "bucket_key": test_run.get("bucket_key"),
        "test_id": test_run.get("test_id"),
        "test_run_id": test_run.get("test_run_id")
    }
    result_url = "{base_url}/buckets/{bucket_key}/tests/{test_id}/results/{test_run_id}".format(**opts)
    message = "Getting result " + result_url
    print(message)

    auth = "Bearer " + access_token

    headers = {
        "Authorization": auth,
        "User-Agent": "python-trigger-sample"
    }
    result_resp = requests.get(result_url, headers=headers)
    
    if result_resp.ok:
        return result_resp.json().get("data")

    if result_resp.status_code == 403:
        print("403 FORBIDDEN!");
        
    if result_resp.status_code == 404:
        print("404 NOT FOUND!");

    return None

def _get_failed_test_feedback_message(result):
    test_id = result.get("test_id")
    test_run_id = result.get("test_run_id")
    bucket_key = result.get("bucket_key")
    failed_test_url = "https://www.runscope.com/radar/{bucket_key}/{test_id}/history/{test_run_id}".format(bucket_key=bucket_key, test_id=test_id, test_run_id=test_run_id)
    message = "Test failed: URL: {failed_test_url}".format(failed_test_url=failed_test_url)
    return message

if __name__ == '__main__':
    main()

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment