一、UnitTest
python自带自动化测试框架
1. testcase:测试用例
定义一个实现加法操作的函数,并对函数进行测试
import unittest # 导包
def my_sum(a, b): # 创建测试用例(加法算法)
return a + b
class my_test(unittest.TestCase): # 定义test类,括号里写unittest.TestCase
def test_1(self): # 第一个测试用例
print(my_sum(5, 6))
def test_2(self): # 第二个测试用例
print(my_sum(1, 3))
结果:
2. testsuite:把多个测试用例整合到一个测试套件中
实例化:suite = unittest.TestSuite()
添加用例:suite.addTest(ClassName('"MethodName"))
import unittest
import testcase
suite = unittest.TestSuite() # 实例化
# 调用addTest方法
suite.addTest(testcase.my_test("test_1"))
suite.addTest(testcase.my_test("test_2"))
# 测试用例添加到测试套件中,并不执行测试用例
# 一次性导入所有测试用例
suite.addTest(unittest.makeSuite(testcase.my_test))
3. TextRunner: 执行测试套件
实例化+调用方法
runner = unittest.TextTestRunner() # 实例化textrunner
runner.run(suite) # 调用对象的run方法
4. TextLoader: 查找指定py文件
import unittest
suite = unittest.Testloader().discover("./", "test*.py") # 查找所有包含test的py文件并执行
runner = unittest.TextTestRunner()
runner.run(suite)
TestSuite:执行py文件中多个测试用例中的几个
TestLoader: 执行文件中的所有
5. Fixure方法级(继承于unittest.TestCase)
testcase.py添加如下代码
注意:setUp, tearDown大写字母
结果:
def setUpModule() 在py文件之前调用
def tearDownModule() 在py文件之后调用
不是方法,是函数
6. 断言(让程序判断测试用例是否符合预期)
testcase中修改def test_1中的代码:
assertEqual(实际结果, 预期结果)
def test_1(self): # 第一个测试用例
num1 = my_sum(5, 6) # 变量
self.assertEqual(num1, 11) # num1为实际结果,11为预期结果
assertin(实际结果,预期结果范围)
def my_rand(self):
return random.randint(1, 5) # 定义1-5中随机选
def test_3(self):
num1 = my_rand()
self.assertin(num1, [1, 2, 3, 4, 5])
7. 参数化
多个测试用例相同,只是传入参数不同
1)安装parameterized
2) 参数化前后
参数化前:
参数化后:
或直接将测试用例赋给变量list1,后续直接调用
运行过程中报错:
错误原因:
test_new.py 中TestCase大写注意,expend拼写错误,修改后仍报错。文件也没有和模块重名的。
修改后代码为:
解决办法:
test_loader.py 中重新输入TestLoader(),在下拉框中选择后生效
结果:
8. 跳过(@unittest.skip)
跳过指定函数或方法。
9. 生成测试报告
1)TexttestRunner格式测试报告
结果:
三个测试用例通过
修改一个错误的预期结果如(3,4,1)(3,4为a,b参数,函数为两数相加,c不可能为1),
运行不报错,报告显示如下图
失败原因:
2) HTMLTestRunner
1、下载HTMLTestRunner.py存到项目文件夹下
1' 导入模块
2' 调用HTMLTestRunner(stream=file, title="")
3' 调用runner对象的run方法方法
import unittest
from HTMLTestRunner import HTMLTestRunner
suite = unittest.TestLoader().discover(",/", "test*.py")
file = open("test01.html", "wb") #wb二进制写的方式,打开文件
runner = HTMLTestRunner(stream=file, title="报告")
runner.run(suite)
file.close()
结果(报错)
原因:官网为Python2,需要手动改为python3
修改几行代码:可参考这篇文章
结果:生成html文件成功!!
打开项目文件,找到html文件打开