unittest用法和report输出

 
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)
 

 

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

 

posted @ 2019-03-04 16:09  jojo-jiao  阅读(560)  评论(0编辑  收藏  举报