DDT-тестирование на основе данных для автоматизации интерфейса Python

предисловие

Сегодня я хочу поговорить с вами о том, как данные DDT управляют тестированием в автоматизации интерфейса python , поэтому не буду нести чушь и перейду сразу к теме.

 

1. Краткое введение

DDT (Date Driver Test), так называемый тест, управляемый данными, просто означает, что выполнение автоматизированного теста управляется изменением данных и, наконец, вызывает изменение результата теста. Используя метод тестирования на основе данных, в сценарии тестирования, где необходимо проверить несколько наборов данных, можно использовать внешние источники данных для параметризации входных, выходных и ожидаемых значений, избегая использования жестко запрограммированных данных в тесте. , то есть тестовые данные и сценарии использования. Разделение кода.

DDT на самом деле является декоратором, он определяет, сколько тестовых случаев генерировать на основе данных, которые вы передаете.
 

Во-вторых, смысл использования

1. Высокая скорость повторного использования кода: тестовую логику нужно написать только один раз, несколько тестовых данных можно использовать повторно, и в то же время можно повысить эффективность написания тестовых сценариев.

2. Высокая эффективность при устранении аномальных неполадок: в соответствии с тестовыми данными каждый фрагмент данных генерирует тестовый пример, и тестовые случаи отделены друг от друга.Если один из них не работает, это не повлияет на другие тестовые случаи.

3. Высокая ремонтопригодность кода: краткая и четкая структура тестирования способствует тому, чтобы другие коллеги могли читать и улучшать ремонтопригодность кода.
 

3. Установка и импорт

Командная строка cmd для выполнения установки: pip install ddt

Импортируйте непосредственно в модуль: импортируйте ddt или импортируйте определенные декораторы: из ddt импортируйте ddt, данные, распаковайте

4. Подробное объяснение использования ddt

Три основных момента:

  • @ddt: украсить тестовый класс
  • @data: украсьте тестовый пример
  • @unpack: украсить тест-кейсы

Предпосылкой для использования ddt является наличие класса тестового примера, затем использование @ddt для оформления класса тестового примера и использование @data (тестовые данные) для оформления тестового набора, как показано в следующем примере интерфейса входа в систему:

from ddt import ddt, data
from common.read_excel import ReadExcel
from common.my_logger import log
 
 
@ddt  # 装饰登录测试用例类,声明使用ddt
class LoginTestCase(unittest.TestCase):
    
    excel = ReadExcel("cases.xlsx", "login")
    cases = excel.read_data()
    
    @data(*cases)	# 装饰测试用例
    def test_login(self, case):
        case_data = eval(case["data"])
        expected = eval(case["expected"])
        case_id = case["case_id"]
        result = login_check(*case_data)
        response = self.http.send(url=url, method=method, json=data, headers=headers)
        result = response.json()
        try:
            self.assertEqual(expected["code"], result["code"])
            self.assertEqual((expected["msg"]), result["msg"])
        except AssertionError as e:
            log.info("用例:{}--->执行未通过".format(case["title"]))
            print("预期结果:{}".format(expected))
            print("实际结果:{}".format(result))
            raise e
        else:
            log.info("用例:{}--->执行通过".format(case["title"]))
 
 
if __name__ == '__main__':
    unittest.main()

@ddt То, что он делает, на самом деле эквивалентно этому коду: LoginTestCase = ddt(LoginTestCase), передать конкретное имя класса в ddt и сообщить ddt, что этот класс тестового примера должен управляться данными.

Что делает @data, так это передает тестовые данные в качестве параметра в тестовый пример.Одни данные соответствуют созданию тестового примера.Если в данных есть несколько данных, то соответственно генерируется несколько тестовых случаев. Если в данных есть последовательные типы данных, такие как кортежи, списки и т. д., данные будут обрабатывать их как единое целое, то есть тестовые данные.

​ Если вы хотите одновременно передать в тестовый пример несколько параметров, вам необходимо разложить данные в скрипте или использовать @unpack для разложения данных. Тестовый пример в приведенном выше примере использует только один параметр, но этот случай параметра представляет собой словарь, который уже содержит несколько данных, просто используйте ключ, чтобы получить соответствующее значение напрямую. @unpack может разделить данные типа последовательности на несколько и передать несколько параметров в тестовый пример, но тестовый пример также должен определить такое же количество параметров для получения.

Источником тестовых данных в приведенном выше примере является использование openpyxl для чтения тестовых данных в Excel, Здесь прямо объясняется, что случаи на самом деле представляют собой список, подобный следующему:

cases = [{'case_id': 1, 'title': '正常登录', 'data': '("test", "Test1234")', 'expected': '{"code": 0, "msg": "登录成功"}'}, {'case_id': 2, 'title': '密码错误', 'data': '("test", "123")', 'expected': '{"code": 1, "msg": "账号或密码不正确"}'}, {'case_id': 3, 'title': '账户名错误', 'data': '("test11", "Test1234")', 'expected': '{"code": 1, "msg": "账号或密码不正确"}'}]
 
# *解包后,一个字典就是一个测试用例数据
# 如第一个字典:{'case_id': 1, 'title': '正常登录', 'data': '("test", "Test1234")', 'expected': '{"code": 0, "msg": "登录成功"}'}

При * распаковке его данные представляют собой 3 словаря, каждый раз, когда словарь передается в тестовый пример, и этот словарь хранит полные тестовые данные тестового примера интерфейса входа в систему, включая идентификатор варианта использования, название варианта использования, пароль учетной записи для теста и ожидаемый результат.

краткое содержание:

  • @data(a,b): каждый из a и b запускает вариант использования
  • @data(*(a,b): a и b запускают вариант использования, используйте * для распаковки, эквивалентно @data(a,b)
  • @data([a,d],[c,d]) Если нет @unpack[a,b], [c,d] будет передано в качестве параметра в вариант использования, т. е. запущено один раз с [ a,b], use [c,d] запускается один раз, если есть @unpack, [a,b] будут декомпозированы, и варианту использования будут переданы два параметра одновременно. Вариант использования должен определить два параметра для получения @unpack применимых кортежей, списков или словарей. Но когда передается словарь, ключ словаря и имя параметра, определяемое вариантом использования, должны быть согласованы
     

5. Расширение

Код ключа: @file_data, файл передачи (json/yaml)

# 传递json
"""
json文件数据
{
	"token":123456,
	"actionName": "api.login",
	"content": {
		"user": "miki",
		"pwd": "Test123"
	}
}
"""
"""
yaml文件
test_list:
  - 11
  - 22
  - 12
sorted_list: [ 11, 12, 22 ]
"""
from ddt import *
 
 
@ddt	# 声明使用ddt
class TestFile(unittest.TestCase):
 
    @file_data('D:/test/test.json')
    def test_json(self, json_data):
        print(json_data)
        
    @file_data('D:/test/test.yaml')
    def test_yaml(self, yaml_data):
        print("yaml", yaml_data)

Подведем итог

Вот и все на сегодняшнюю статью, надеюсь она поможет всем, друзья, которым она понравилась, могут ставить лайки, собирать комментарии и обращать внимание, автор время от времени будет публиковать некоторые преимущества и небольшие сюрпризы в конце статьи, если вам нравится это, пожалуйста, не забудьте, как это.

 

Supongo que te gusta

Origin blog.csdn.net/lzz718719/article/details/130728535
Recomendado
Clasificación