自动化测试脚本参数化,生成测试报告和跳过的实现
1、安装参数化(parameterized)包过程
输入安装包的名称–>选择对的包–>勾选–>安装
代码演示
在我们测试一些需求时,可能要重复的输入不同的内容进行测试,这时我们就要写很多测试用例,但是他们基本相同,只是传入的参数和预期结果不同,这时我们参数化就会大大减少的我们的工作量,而且也会减少代码的冗余,更方便维护,下面我就用代码演示一下。
首先不使用参数化的实例的演示
import unittest
def chat(a):
if a == "想你了":
return "我也想你了,亲爱的!!"
if a == "喜欢你":
return "我也喜欢你,宝贝!!"
if a == "在吗":
return "在呢,你在干嘛!!"
if a == "睡了吗":
return "晚安,明天见!!"
# 测试上面的这chat函数,我们要吧所有的情况测试到
class Test_Case(unittest.TestCase):
def test_01(self):
result = chat("想你了")
self.assertIn("亲爱的",result)
def test_02(self):
result = chat("喜欢你")
self.assertIn("宝贝",result)
def test_03(self):
result = chat("在吗")
self.assertIn("在呢",result)
def test_04(self):
result = chat("睡了吗")
self.assertIn("晚安",result)
上面的这个实例可以看出,我们要想把所有的情况都测试到,那就需要写4条用例,实际工作当中可能更多,每个用例就是出入的参数和预期改了改,其他的基本就是copy过来的,下面我们用参数化的方式来实现这个案例。
import unittest
from parameterized import parameterized
def chat(a):
if a == "想你了":
return "我也想你了,亲爱的!!"
if a == "喜欢你":
return "我也喜欢你,宝贝!!"
if a == "在吗":
return "在呢,你在干嘛!!"
if a == "睡了吗":
return "晚安,明天见!!"
# 测试上面的这chat函数,我们要吧所有的情况测试到
class Test_Case(unittest.TestCase):
list_data = [("想你了","亲爱的"),("喜欢你","宝贝"),("在吗","在呢"),("睡了吗","晚安")]
@parameterized.expand(list_data)
def test_01(self,enter,output):
result = chat(enter)
self.assertIn(output,result)
说明:首先进行导包,然后参数化的格式是以装饰器的形式加在对应的用例方法上的,调用expand()方法实现的,这里需要说明一下参数的格式时列表套元祖的形式,每一个元祖就是一个用例所需要的数据,有多少个元祖就会执行多少次下面的用例,并且下面用例方法的形参的数量要与上面元组中的数据一一对应,
通过参数化我们发现会少些很多case,减少了工作量也减少了出错的概率。
2、跳过
可以有选择的执行测试用例, @unittest.skip(跳过条件)
import unittest
class Test_09(unittest.TestCase):
@unittest.skip("还没完成")
def test01(self):
print("test01")
def test02(self):
print("test02")
3、测试报告
1、把文件HTMLTestRunner.py拷贝到项目py文件目录里
2、from HTMLTestRunner import HTMLTestRunner
3、用HTMLTestRunner的对象run方法执行测试套件中的测试用例
HTMLTestRunner.py下载地址:点击下载HTMLTestRunner
代码演示
import unittest
import time
from HTMLTestRunner import HTMLTestRunner
# 使用TestLoader添加测试用例
suite = unittest.TestLoader().discover("./","test*.py") # 从当前目录查找,test开头,扩展名为.py的文件
file_name = "./report%s.html"% time.strftime("%Y%m%d%H%M%S")
with open(file_name,"wb") as f:
HTMLTestRunner(stream=f,title="测试报告",description="我的测试报告").run(suite)
查看测试报告
如果执行测试报告时报错:ImportError: No module named ‘StringIO’
是因为官网的是python2语法写的,需要我们手动把官网的HTMLTestRunner.py改成python3的语法
修改统计:
第94行,将import StringIO修改成import io
第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()
第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:
第766行,将uo = o.decode(‘latin-1’)修改成uo = e
第772行,将ue = e.decode(‘latin-1’)修改成ue = e
第631行,将print >> sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime)修改成print(sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime))
按照上面改完之后应该就没有问题了,可以正常的生成我们的测试报告了
到这里Unit Test测试框架的介绍就结束了,我们在做自动化能用到的大概就这些内容后面我会介绍移动端测试工具appium的介绍,感兴趣的可以继续关注