关键字 + yaml数据 驱动设计— Selenium二次封装与集成(Unittest+ddt+PyYMAL)(关键字歌曲)

网友投稿 543 2022-09-01


关键字 + yaml数据 驱动设计— Selenium二次封装与集成(Unittest+ddt+PyYMAL)(关键字歌曲)

四、数据驱动 + 关键字驱动  Selenium二次封装与集成(Unittest+ddt+PyYMAL)

1.关键字驱动主要应用方向和优点: 对于多系统的复用性,一套代码可支持多系统,POM只能支持单一系统 简化代码降低冗余,提升复用性、可维护性2.关键字驱动体系下的结构: 1.逻辑代码 web_key_demo.py 2.测试代码 case_demo03.py 3.测试数据 search.yaml 基于 数据驱动 + 关键字驱动 实现的自动化测试效果。

4.1 关键字驱动类(逻辑层)

对于线性代码进行封装,这样我们就得到封装后的方法

逻辑代码 web_key_demo.py

4.2 测试用例(unittest初探)

基于封装后的方法线性代码可以这样写:

# case_demo.py ++++++++++++++++++++++++++from web_key_demo import KeyDemokd = KeyDemo('Chrome')kd.open( ' ' )kd.input( 'id', 'kw','美女')kd.click( 'id' , 'su')kd.sleep(3)kd.quit()

View Code

对于多个测试用例可以引入unittest管理:

# case_demo02.py ++++++++++++++++++++import unittestfrom web_key_demo import KeyDemoclass CaseDemo(unittest.TestCase): def test_01(self): # 测试用例名字需要以test开头 kd = KeyDemo('Chrome') kd.open(' ') kd.input('id', 'kw', '美女') kd.click('id', 'su') kd.sleep(3) kd.quit() def test_02(self): kd = KeyDemo('Chrome') kd.open(' ') kd.input('id', 'kw', '妹子') kd.click('id', 'su') kd.sleep(3) kd.quit()if __name__ == '__main__': unittest.main() # 只要运行这个,就会逐个运行CaseDemo下test开头的方法,如test_01和test_02

unittest初识 case_demo02.py

4.3 数据层(unittest + ddt + yaml)

上面代码可以发现测试用例01和02只是数据不同,可以采取数据驱动

unittest 和 ddt 有很好的契合度,ddt读取的数据可以直接用于unittest

首先需要安装ddt和PyYAML模块,用ddt读取yaml数据文件中一组一组数据为一个个的字典,逐个传入测试用例来执行

# case_demo03.py ++++++++++++++++++++import unittestfrom ddt import ddt,file_datafrom web_key_demo import KeyDemo@ddt # 装饰ddt来管理测试类class CaseDemo(unittest.TestCase): @file_data('./data/search.yaml') # ddt模块读取文件中数据转化为一组一组数据传入测试用例 def test_01(self, url, _input, click): # 测试用例名字需要以test开头 kd = KeyDemo('Chrome') kd.open(url) kd.input(**_input) kd.click(**click) kd.sleep(3) kd.quit()if __name__ == '__main__': unittest.main()

unittest +ddt

代码还可以简化为:

import unittestfrom ddt import ddt,file_datafrom web_key_demo import KeyDemo@ddt # 装饰ddt来管理测试类class CaseDemo(unittest.TestCase): # 在测试用例执行前先执行 def setUp(self) -> None: self.kd = KeyDemo('Chrome') # 测试用例执行后紧接着执行 def tearDown(self) -> None: self.kd.quit() @file_data('./data/search.yaml') # ddt模块读取文件中数据转化为一组一组数据传入测试用例 def test_01(self, url, _input, click): # 测试用例名字需要以test开头 self.kd.open(url) self.kd.input(**_input) self.kd.click(**click) self.kd.sleep(3)if __name__ == '__main__': unittest.main()

测试代码 case_demo03.py

- # 一个符号表示一组数据,ddt读取后是一个字典 url : _input: name: id # _input下的一组数据,读取后字典键值对的value是一个字典 value: kw txt: 美女 click: name: id value: su- url : _input: name: id value: kw txt: 妹子 click: name: id value: su- url : _input: name: id value: key txt: 不可描述的好东西 click: name: xpath value: //button[@aria-label='搜索']

数据层 search.yaml

注意执行的时候光标不能放入CaseDemo类中,需要放到外面,点一下其他位置再执行,不然会报错

AttributeError: type object 'CaseDemo' has no attribute 'test_01'

ErrorTraceback (most recent call last): File "E:\python3.8\lib\unittest\case.py", line 60, in testPartExecutor yield File "E:\python3.8\lib\unittest\case.py", line 676, in run self._callTestMethod(testMethod) File "E:\python3.8\lib\unittest\case.py", line 633, in _callTestMethod method() File "E:\python3.8\lib\unittest\loader.py", line 34, in testFailure raise self._exception File "E:\python3.8\lib\unittest\loader.py", line 169, in loadTestsFromName parent, obj = obj, getattr(obj, part)AttributeError: type object 'CaseDemo' has no attribute 'test_01'

View Code


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python的qrcode库生成二维码 圆角logo二维码 myqr库生成动态二维码(qrcode生成二维码图片及文字说明)
下一篇:python异常处理 异常装饰器 抛出异常 断言(python异常处理机制中没有什么语句)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~