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

PyNSK 5,913 views 23 slides Feb 15, 2016
Slide 1
Slide 1 of 23
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23

About This Presentation

Докладчик:
Антон Голов

Описание:
Поговорим о некоторых функциях для интеграции TestRail c внешними системами и автоматизации деятельности QA. Будет немного про Google Docs,...


Slide Content

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

●Что такое test rail?
●Как можно автоматизировать общение с ним?
●Некоторые полезные возможности.
●С чем можно интегрировать?
О чем будем говорить

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

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

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

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

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

Как можно автоматизировать общение с ним?
С помощью Python и не только:-)
Плюсы:
●Rest API
○С доступом к каждой
сущности проекта
●Очень простое API
●API отдает json
Минусы:
●Очень простое API - мало методов, есть
только базовые.

Некоторые полезные возможности
●Импорт из файла или
googledocs.
●Экспорт в googledocs по
формату
●Подготовка test run
●Выполнение test run

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

case.map
title -> Title
custom_steps -> Steps
custom_expected -> Expected Result
estimate -> Estimate
custom_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

Собственно сама загрузка в testrail
def 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 секции

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


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

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

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()

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

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

Экспорт в гугл по формату. Отдаем гуглу

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

Подготовка TestRun
def 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 тест плана и его данные.

Закрытие 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

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


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

Закрытие 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

Пример использования. Получаем кейсы из
гуглодока.
import testrail, json, gspread, random
from oauth2client.client import SignedJwtAssertionCredentials

#get cases from file
json_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()

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

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

# import cases
client.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]

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


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 TestResults
print client.PutTestResults(TestResults)

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

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

Полезные ссылки.
●http://www.gurock.com/testrail/
●http://docs.gurock.com/testrail-api2/start
●https://github.com/burnash/gspread

Вопросы?
Голов Антон
[email protected]
skype: golov.anton