23
TestRail. Некоторые возможности интеграции. как помочь ручному тестированию Голов Антон skype: golov.anton email: [email protected]

TestRail. Некоторые возможности интеграции

  • Upload
    pynsk

  • View
    1.155

  • Download
    5

Embed Size (px)

Citation preview

Page 1: TestRail. Некоторые возможности интеграции

TestRail. Некоторые возможности интеграции.

как помочь ручному тестированию

Голов Антонskype: golov.antonemail: [email protected]

Page 2: TestRail. Некоторые возможности интеграции

● Что такое test rail?● Как можно автоматизировать общение с ним?

● Некоторые полезные возможности.● С чем можно интегрировать?

О чем будем говорить

Page 3: TestRail. Некоторые возможности интеграции

Немного теорииTest case — это проверка. "Выполни тест-кейс по вводу отрицательных значений" = проведи проверку такую-то и проверь, что результат будет такой-то.

Test suit - набор кейсов объединенных по какому-то принципу, как правило логическому.

Test plan- план тестирования, помимо кейсов содержит конфигурации тестирования, сроки проведения и ответственного.

Page 4: TestRail. Некоторые возможности интеграции

Что такое TestRail

Система хранения и управления тест кейсами как ручными так и автоматическими, для автотестов можно использовать вместо git и хранить\обновлять кейсы и наборы кейсов

Page 5: TestRail. Некоторые возможности интеграции

Что можно делать и как применять?● Необходимо описать и стандартизировать процесс тестирования в вашем

проекте.● Выбрать ключевые точки где необходимо применять автоматизацию.● Автоматизировать. :-)

Page 6: TestRail. Некоторые возможности интеграции

Как можно автоматизировать общение с ним?С помощью Python и не только:-)

Плюсы:

● Rest API ○ С доступом к каждой

сущности проекта● Очень простое API● API отдает json

Минусы:

● Очень простое API - мало методов, есть только базовые.

Page 7: TestRail. Некоторые возможности интеграции

Некоторые полезные возможности● Импорт из файла или

googledocs.● Экспорт в googledocs по

формату● Подготовка test run● Выполнение test run

Page 8: TestRail. Некоторые возможности интеграции

Импорт из файла, googledocs.Для импорта будем использовать следующую карту импорта:

case.maptitle -> Titlecustom_steps -> Stepscustom_expected -> Expected Resultestimate -> Estimatecustom_preconds -> Preconditions

Метод для загрузки карты импорта:

def ImportCaseMap(mapfile): result_map = [] filemap = open(mapfile)

for line in filemap: split_line = line.split("->") split_line[0] = split_line[0].strip() split_line[1] = split_line[1].strip() result_map.append(split_line) filemap.close()

return result_map

Page 9: TestRail. Некоторые возможности интеграции

Собственно сама загрузка в testraildef ImportCases(self, cases, section_id, map):

map_list = ImportCaseMap(map) good_case = {} good_cases = []

for case in cases: for item in map_list: good_case[item[0]] = case[item[1]] good_cases.append(good_case.copy()) good_case.clear()

for case in good_cases: self.send_post("add_case/" + str(section_id), case) return None

● кейсы в виде списка словарей● список полей карты импорта● ID секции

Page 10: TestRail. Некоторые возможности интеграции

Экспорт в гугл по формату. Готовим данные

def PrepareUtest(self, temp_cases): # prepare cases for u test temp_cases = self.send_get("get_cases/" + get_project + "&suite_id=" + get_suite) result = [] int_case = {} i = 1

Page 11: TestRail. Некоторые возможности интеграции

Экспорт в гугл по формату. Готовим данныеfor temp_case in temp_cases: if temp_case["custom_steps_separated"] is not None: for item_2 in temp_case["custom_steps_separated"]: int_case["#"] = i int_case["Title"] = temp_case["title"] int_case["Section"] = section_name(temp_case["section_id"]) int_case["Precondition"] = temp_case["custom_preconds"] int_case["Steps"] = item_2["content"] int_case["Result"] = item_2["expected"] int_case["Estimate"] = temp_case["estimate"] result.append(int_case.copy()) i += 1 int_case.clear()

Page 12: TestRail. Некоторые возможности интеграции

Экспорт в гугл по формату. Готовим данныеelse: int_case["#"] = i int_case["Title"] = temp_case["title"] int_case["Section"] = section_name(temp_case["section_id"]) int_case["Precondition"] = temp_case["custom_preconds"] int_case["Steps"] = temp_case["custom_steps"] int_case["Result"] = temp_case["custom_expected"] int_case["Estimate"] = temp_case["estimate"] result.append(int_case.copy()) i += 1 int_case.clear() return result

Page 13: TestRail. Некоторые возможности интеграции

Экспорт в гугл по формату. Отдаем гуглуdef PutCasesToGoogle(filename, key, current_case): # Google put in test cases by u-test format

json_key = json.load(open(key)) scope = ['https://spreadsheets.google.com/feeds']

credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'].encode(), scope) gc = gspread.authorize(credentials) wks = gc.open(filename).sheet1 i = 10 for case in current_case: wks.update_acell("A" + str(i), case["#"]) wks.update_acell("B" + str(i), case["Title"]) wks.update_acell("C" + str(i), case["Section"]) wks.update_acell("D" + str(i), case["Precondition"]) wks.update_acell("E" + str(i), case["Steps"]) wks.update_acell("F" + str(i), case["Result"]) wks.update_acell("H" + str(i), case["Estimate"]) i += 1 return None

Page 14: TestRail. Некоторые возможности интеграции

Подготовка TestRundef AddTestPlan(self, project_id, suits, plan_name=str): testruns = {} testruns['entries'] = [] testruns['name'] = plan_name for item in suits: testruns['entries'].append({"suite_id": item, "name": self.section_name(item), "include_all": True})

result = self.send_post("add_plan/" + str(project_id), testruns) return result

Что передаем:● идентификатор проекта● набор тестсьютов● название тест плана

Что получаем:● id тест плана и его данные.

Page 15: TestRail. Некоторые возможности интеграции

Закрытие TestRun. Получение тестов.

def GetTestPlan(self, plan_id): tests = [] run_ids = [] testplan = self.send_get("get_plan/" + str(plan_id)) for item in testplan['entries']: for run in item['runs']: run_ids.append(run['id']) for item in run_ids: tests.append(self.send_get("get_tests/" + str(item))) return tests

Что передаем:● номер тест плана в системе● разбираем ответ сервера и

возвращаем список тестов для выполнения

Что получаем:● список словарей с тестами

Page 16: TestRail. Некоторые возможности интеграции

Закрытие TestRun. Передача результатов тестов.def PutTestResults(self, TestResults):

result = []

for item in TestResults: result.append(self.send_post("add_result/" + str(item.pop('case_id')), item))

return result

Что передаем:● Список результатов тестов из

вашей системы тестирования в виде списка словарей где указан идентификатор прогона и тесты с результатами.

● Идентификатор плана

Что получаем: ● ответ от Testrail

Page 17: TestRail. Некоторые возможности интеграции

Пример использования. Получаем кейсы из гуглодока.

import testrail, json, gspread, randomfrom oauth2client.client import SignedJwtAssertionCredentials

#get cases from filejson_key = json.load(open("My Project-5244905c20f9.json"))scope = ['https://spreadsheets.google.com/feeds']credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'].encode(), scope)gc = gspread.authorize(credentials)my_spreadsheet = gc.open_by_url("https://docs.google.com/spreadsheets/d/1W753C_9CpNwN7_vFPYv-uL5X64kFKwA7eyRFBMT2ExE/edit#gid=580422902")my_rows = my_spreadsheet.get_worksheet(0).get_all_records()

Page 18: TestRail. Некоторые возможности интеграции

Пример использования. создаем подключение, импортируем кейсы и создаем тестплан

# get connectclient = testrail.APIClient("http://localhost:8888/testrail")client.user = "[email protected]"client.password = "12345"

# import casesclient.ImportCases(my_rows[0:2], 2, 'case.map')client.AddTestPlan(1, suits, "testing plan")tests = client.GetTestPlan(1)TestResults = []case = {}state = [1, 2, 4, 5]

Page 19: TestRail. Некоторые возможности интеграции

Пример использования. Получаем результат Проверок и отдаем в тестрейл.

for item in tests: for item_2 in item: case['case_id'] = item_2['id'] case['status_id'] = random.choice(state) case['comment'] = 'test comment ' + str(random.randrange(1, 5, 1)) case['actual'] = 'test result ' +str(random.randrange(1, 20, 1)) TestResults.append(case.copy()) case.clear()

print TestResultsprint client.PutTestResults(TestResults)

Page 20: TestRail. Некоторые возможности интеграции

Выполненный тест план.

Page 21: TestRail. Некоторые возможности интеграции

С Чем можно интегрировать?

Есть REST API, методы кастомирузуются, значит ИНТЕГРУЕТСЯ СО ВСЕМ ПОДРЯД"

Page 22: TestRail. Некоторые возможности интеграции

Полезные ссылки.

● http://www.gurock.com/testrail/● http://docs.gurock.com/testrail-api2/start

● https://github.com/burnash/gspread

Page 23: TestRail. Некоторые возможности интеграции

Вопросы?

Голов Антон

[email protected]

skype: golov.anton