自动化参数化方法
Parameterized参数化库
Parameterized是Python的一个参数化库,同时支持unittest、pytest单元测试框架。
安装:pip install parameterized
应用场景
使用在web的ui自动化测试、接口自动化测试中,对测试数据进行参数化。
需求:百度搜索关键字参数化处理
#!/usr/bin/env python # -*- coding: utf-8 -*- # author: 青城子 # datetime: 2022/2/9 22:51 # ide: PyCharm import unittest import time from selenium import webdriver from parameterized import parameterized class TestBaiDu(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = webdriver.Chrome() cls.driver.implicitly_wait(5) cls.driver.maximize_window() cls.base_url = "https://www.baidu.com" @classmethod def tearDownClass(cls): cls.driver.quit() def key_search(self, key): self.driver.get(self.base_url) self.driver.find_element_by_xpath('//*[@id="kw"]').send_keys(key) self.driver.find_element_by_xpath('//*[@id="su"]').click() time.sleep(2) @parameterized.expand([ ("selenium",), ("python",), ] ) def test_key_search(self, key): print(key) self.key_search(key) if __name__ == '__main__': unittest.main()
数据驱动(ddt)
利用测试数据来驱动测试用例的执行;DDT可以实现用例的重复执行以及代码的重复使用,减少工作量。
数据代码分离为主流设计思路,在常见的测试体系中可以使用excel、json文件来管理测试数据;通过代码自动读取,来驱动用例的执行,ddt测试框架基于这种设计思路上,实现了方便、简单易懂的效果。
安装:pip insatll ddt
实例:
#!/usr/bin/env python # -*- coding: utf-8 -*- # author: 青城子 # datetime: 2022/2/9 23:10 # ide: PyCharm import unittest import requests import ddt from BSTestRunnerdChinese import BSTestRunner data_list = [ {"url": "https://cnodejs.org/api/v1/topics", "method": "get"}, {"url": "https://cnodejs.org/api/v1/topic/5433d5e4e737cbe96dcef312", "method": "get"}, {"url": "https://cnodejs.org/api/v1/topic_collect/collect", "method": "post"}, {"url": "https://cnodejs.org/api/v1/topic_collect/de_collect", "method": "post"}, {"url": "https://cnodejs.org/api/v1/user/alsotang", "method": "get"}, {"url": "https://cnodejs.org/api/v1/message/mark_all", "method": "post"}, ] @ddt.ddt class MyCase(unittest.TestCase): @ddt.data(*data_list) def test_case(self, item): response = requests.request( url=item['url'], method=item['method'] ) self.assertEqual(response.status_code, 200) if __name__ == '__main__': suite = unittest.makeSuite(testCaseClass=MyCase, prefix="test") filename = "a.html" with open(filename, "wb") as f: BSTestRunner( stream=f, title="BSTestRunner示例报告", description="演示ddt和BSTestRunner综合用法", verbosity=2, # 更详细和直观打印用例名称和执行结果 ).run(suite)