python-Unittest框架学习

一、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

修改几行代码:可参考这篇文章

python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决 python3中用HTMLTestRunner.py报Im_小胖羊快跑的博客-CSDN博客

 结果:生成html文件成功!!

打开项目文件,找到html文件打开

猜你喜欢

转载自blog.csdn.net/Kiraxqc/article/details/125662951
今日推荐