Python 单元测试框架-unittest (二)

上篇已经介绍了单个模块的用例执行,如果多个模块的话需要去收集每个模块的用例,然后执行,最终生成测试报告。

接下来继续完善项目,写个简单的注册模块以test_开头;这时候需要把test_login,test_register的用例收集在一起,所以需要在创建一个用来运行所有用例的文件run_cases(放在项目的根目录)。
项目目录如下:
在这里插入图片描述
test_register.py代码如下:

#注册功能
def register(phone,code):
    if phone!='' and code!='':
        if len(phone)==11 and code=='1234':#手机号与验证码正确
            return {'mgs':'注册成功'}
        else:
            return {'mgs':'手机号或验证码错误'}#手机号或验证码错误
    return {'mgs':'手机号或验证码为空'}#手机号或验证码为空

#测试用例
import unittest
class TestRegister(unittest.TestCase):
    def test_register_success(self):
        phone='13800138000'
        code='1234'
        expect_result={'mgs':'注册成功'}
        actual_result=register(phone,code)
        self.assertTrue(expect_result==actual_result)
    def test_register_error(self):
        phone='123456'
        code='4567'
        expect_result = {'mgs': '手机号或验证码错误'}
        actual_result = register(phone, code)
        self.assertTrue(expect_result == actual_result)
    def test_register_empty(self):
        phone=''
        code=''
        expect_result = {'mgs': '手机号或验证码为空'}
        actual_result = register(phone, code)
        self.assertTrue(expect_result == actual_result)

TestSuiteTestLoader
TestSuite:把所有用例存进来
TestLoader():用例加载
TestLoader().discover(path):通过目录去自动查找以test_开头的用例;path为用例文件的路径

代码如下:


import unittest
import os
#找到用例文件的绝对路径
path=os.path.abspath(__file__)
dir_path=os.path.dirname(path)
cases_path=os.path.join(dir_path,'test_cases')
loader=unittest.TestLoader()#实例化加载器
test_suite=loader.discover(cases_path)#使用loader收集所有的测试用例,用一个变量接收
#这里的test_suit就是unittest.Testsuite
print(test_suite)

先来看一下运行结果:可以看到两个模块的测试用例都收集了起来,存放到一个列表里。

<unittest.suite.TestSuite 
tests=[<unittest.suite.TestSuite 
tests=[<unittest.suite.TestSuite 
tests=[<test_login.TestLogin testMethod=test_login_empty>, 
<test_login.TestLogin testMethod=test_login_error>, 
<test_login.TestLogin testMethod=test_login_success>]>]>, 
<unittest.suite.TestSuite 
tests=[<unittest.suite.TestSuite tests=[<test_register.TestRegister testMethod=test_register_empty>, 
<test_register.TestRegister testMethod=test_register_error>, 
<test_register.TestRegister testMethod=test_register_success>]>]>]>

如果只想收集登录模块的用例可以用LoadTestsFromModule(test_login)如下:

from  Testdemo.test_cases import test_login#导入收集用例的模块
loader=unittest.TestLoader()#实例化加载器
case=loader.LoadTestsFromModule(test_login)#收集用例
print(case)

结果如下:只收集了登录功能的用例

<unittest.suite.TestSuite
tests=[<unittest.suite.TestSuite 
tests=[<Testdemo.test_cases.test_login.TestLogin testMethod=test_login_empty>, <Testdemo.test_cases.test_login.TestLogin testMethod=test_login_error>, <Testdemo.test_cases.test_login.TestLogin testMethod=test_login_success>]>]>

假如有abcd四个模块,我只想收集a与b模块的用例,可以使用LoaderTestFromModule()方法收集a与b的用例后使用unittest.TestStuie()里面的addTests([a_case,b_case])放在一起。如下:

import a,b#导入a b 模块
loader=unittest.TestLoader()#实例化加载器
total=unittest.TestSuite()#初始化一个suite
a_case=loader.LoaderTestFromModule(a)#收集a的用例
b_case=loader.LoaderTestFromNodule(b)#收集b的用例
total.addTests([a_case,b_case)#用例放在一起

——————————————————————————————————————————————
收集完用例后需要执行。
unittest.TextTestRunner()

runner=unittest.TextTestRunner#实例化
runner.run(test_suite)#run()方法去执行测试用例

来看一下执行结果:F代表failed,点代表passed
在这里插入图片描述
unittest的TextTestRunner是可以自动生成文本格式的报告,来看一下是如何实现的:

with open('txt_report.txt','w',encoding='utf-8') as f:#新建文档,用于存放测试结果
    runner=unittest.TextTestRunner(f,verbosity=2)#verbosity测试结果的详细程度
    runner.run(test_suite)#执行

报告如下:
在这里插入图片描述
以上这种文本格式的不推荐使用(有点low),一般常用的是HTML格式的测试报告,使用第三方模块HTMLTestRunnerNew,需要自己下载,下载后放到Lib或site-packages里面就行了。
链接: https://pan.baidu.com/s/1cX1-HMkONqDpkzQ_M8VWYw
提取码: 46ce

如下:
title(标题),description(描述),tester(测试人员)自己定义;
需要注意文件要以html格式创建,以‘+b’的模式写入。

with open('txt_report.html','wb') as f:
    runner=HTMLTestRunner(f,title='2020年5月26日自动化测试报告',
                          description='登录与注册模块测试',
                          tester='tester',
                          verbosity=2)
    runner.run(test_suite)

最后看完整代码如下:

from HTMLTestRunnerNew import HTMLTestRunner
import unittest
import os
path=os.path.abspath(__file__)
dir_path=os.path.dirname(path)
cases_path=os.path.join(dir_path,'test_cases')

loader=unittest.TestLoader()
test_suite=loader.discover(cases_path)#收集测试用例
with open('txt_report.html','wb') as f:
    runner=HTMLTestRunner(f,title='2020年5月26日自动化测试报告',
                          description='登录与注册模块测试',
                          tester='tester',
                          verbosity=2)
    runner.run(test_suite)

执行完后会生成一份测试报告,在浏览器中打开就行,如下:
一共有6条用例,失败1条,通过5条。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久醉绕心弦,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值