import unittest,time,os
from lib import HTMLTestRunner_PY3 #需要模板
def htmlreport():
reportdir=os.path.dirname(os.path.abspath('.'))+'\report\'
testdir=os.path.dirname(os.path.abspath('.'))+'\test\'
suite = unittest.defaultTestLoader.discover(testdir, pattern='test*.py')
now=time.strftime('%Y-%m-%d',time.localtime(time.time()))
reportname=reportdir + now + 'report.html'
with open(reportname, 'wb+') as f : #有中文字要用‘wb’
runner=HTMLTestRunner_PY3.HTMLTestRunner(stream=f,title='测试报告',description=' Report Details ' , verbosity=2)
runner.run(suite)
def textreport():
reportdir=os.path.dirname(os.path.abspath('.'))+'\report\'
testdir=os.path.dirname(os.path.abspath('.'))+'\test\'
suite = unittest.defaultTestLoader.discover(testdir, pattern='test*.py')
now=time.strftime('%Y-%m-%d',time.localtime(time.time()))
reportname=reportdir + now + 'report.txt'
with open(reportname, 'a') as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2)
runner.run(suite)
![](https://img2018.cnblogs.com/blog/1572463/201903/1572463-20190304160203037-656471349.png)
testsuite组织用例
import unittest
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
if __name__ == '__main__':
# 执行测试
runner = unittest.TextTestRunner()
runner.run(discover)
discover()方法中参数的意思:
-
test_dir:需要加载的单元测试文件的路径。因为我这里 test.py文件和和各个测试用例在同一路径下,所以
test_dir = './'
。如果不是在同一路径下,就填写绝对路径, -
比如我的路径就应该是
test_dir = /Users/guxuecheng/Desktop/unittest
脚本
-
patten 是一个正则表达式,
pattern='test*.py'
是指加载所有 test 开头的.py 文件,*表示任意多个字符。 - discover()方法会自动的根据测试目录(test_dir)匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件 suite 中,因此可以通过run()方法执行 discover。
单元测试的重要概念
1. TestCase
一个TestCase的实例就是一个测试用例。一个测试用例要包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个功能进行验证。
2. TestSuite
对于某一个功能模块的验证可能需要多个测试用例,多个测试用例集合在一起执行验证某一个功能,这样就是一个TestSuite。通过addTest()方法将 TestCase 加载到 TestSuite()中。
3. TestRunner
TestRunner可以使用图形界面、文本界面,或返回一个特殊的值等方式来表示测试执行的结果。TextTestRunner提供的 run()方法来执行 test suite/test case。
4.TestFixture
一个测试用例环境的搭建和销毁就是一个 fixture。
- unittest是Python自带的单元测试框架,我们可以用其来作为我们自动化测试框架的用例组织执行框架。
- unittest的流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。
- 一个class继承unittest.TestCase即是一个TestCase,其中以 test 开头的方法在load时被加载为一个真正的TestCase。
- verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告。
- 可以通过addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。
- 用 setUp()、tearDown()、setUpClass()以及 tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境
- 我们可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。
- 参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告。
还有不明白请查看以下链接
来源
链接:https://www.jianshu.com/p/d877c855b9de