如何修改pytest-html源码来优化接口自动化测试报告以前常用unittest做接口自动化测试,后来想获取单个接口的响应时间,便采用pytest单元测试框架。虽然获得的时间不太准确。因为pytest测试报告的时间是从一个用例开始到结束,其中包括了断言,所以实际时间比响应时间略长。如果从参考的角度看,这个时间虽然不是很准确,但仍有价值。一:Pytest与ddt冲突如果你想使用pytest,就不能使用ddt做数据驱动了,否则运行时会抛出异常。提示data不是pytest的一个fixture。这时可以使用pytest的参数化,即下面这种形式:一般来说,使用最多的是前两个参数,argnames和argvalues。argnames:用逗号分隔的字符串,表示一个或多个参数名或参数列表/元组。argvalues:是一个列表,让前面的参数argnames依次从中取值用于迭代这样的话,我们就解决了第一个问题。即用pytest参数化来代替unittest的数据驱动。测试报告中的用例名字不规范。迫不及待的点了运行,突然发现测试报告中的用例名字很糟糕,这是什么鬼,为什么会这样写?这样的测试用例名字,第一眼让人感觉很凌乱,因为根本看不出是哪条接口的。如果能将测试用例中的case_id对应的值作为用例名字就比较完美了:当时我的第一思路是,先去看看测试报告的元素。这个用例名字的元素对应的标签的td。对应的class属性值是col-name。那能不能去pytest-html的源码中看看在哪一块。在其他地方没有找到,但在plugin.py中找到了,可以看到找到了一个,没错就是我们想要的td标签。那么还有一个参数self.test_id是什么?大胆的猜测一下,应该是td标签对应的文本值吧。既然要改变td标签的文本值,现在已经猜测是self.test_id对应的值。接下只需搜索一下self.test_id是怎么定义的,一切便迎刃而解!但是真的这么简单吗?请看上图,一共找到了4个self.test_id。除了刚刚我们找的那个,有2个和report.nodeid有关。有1个和extra_index和test_index有关,report.nodeid可能是report的一个属性。而后面两个参数是crate_asset的两个形参,这些东西我们能直接获取到吗?看到这里,感觉第一个思路错了,至少是方向有问题!想想之前,在做unittest的时候,ddt通过修改源码改变用例名字。ddt修改时并不是去HTMLTestRunner中修改的。同理,我们推断下,pytest要修改用例名字,
转载请注明:http://www.aierlanlan.com/tzrz/7510.html