目录:

1.unitest简介

2.断言方法

3.组装测试用例+run

4.用例执行的顺序

5.skip装饰器--跳过测试和预期失败

6.生成html测试报告

7.自动发送邮件

一、unitest简介

1、什么是单元测试?

①单元测试负责对最小的软件设计单元进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误。

②以代码测试代码

2、重要概念

1).Test Case (一个TestCase的实例就是一个测试用例)

一个完整的测试流程包括:

①测试前准备环境的搭建,每个用例运行之前运行的(setUp)

②实现测试过程的代码(run)

③测试后环境的还原(tearDown)

2).Test Suite (测试套件:把多条用例放在一起执行,作用:TestSuite用来组装单个测试用例)

3).Test Runner (测试的执行)

4).Test Fixture

二、断言方法

1、在执行用例过程中,最终用例是否执行通过,是通过判断测试得到的实际结果与预期结果是否相等决定的

2、unittest框架的TestCase类提供下面这些方法用于测试结果的判断

 三、组装测试用例+run

①suite.addTest()  当测试用例集更多,runtest逐一添加过于麻烦,就可以用第2种方法

import unittest
from chaifen.testadd import TestAdd
from chaifen.testsub import TestSub

suite = unittest.TestSuite() # 定义一个测试集合
suite.addTest(TestAdd("test_add"))
suite.addTest(TestAdd("test_add2"))
suite.addTest(TestSub("test_sub"))
suite.addTest(TestSub("test_sub2"))

if __name__ == '__main__':
runner=unittest.TextTestRunner()
runner.run(suite)

② TestLoader类中的discover()方法

unittest.defaultTestLoader.discover(start_dir, pattern, top_level_dir)

start_dir:要测试的模块名或测试用例目录

pattern=‘test*.py':表示用例文件名的匹配原则。

top_level_dir=None:测试模块的顶层目录,如果没有顶层,默认为None。

import unittest

    testdir = './'  # 定义测试用例的目录
    discover = unittest.defaultTestLoader.discover(testdir, pattern='test*.py')

if __name__ == '__main__':
    runner=unittest.TextTestRunner()
    runner.run(discover)

四、用例执行的顺序

unittest框架默认根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0~9、A~Z、a~z

五、skip装饰器--跳过测试和预期失败

在运行测试时,有时需要直接跳过某些测试用例,或者当用例符合某个条件时跳过测试。

①unittest.skip(reason) 无条件地跳过装饰的测试,说明跳过测试的原因。

②unittest.skipIf(condition,reason) 跳过装饰的测试,如果条件为真时。

③unittest.skipUnless(condition, reason) 跳过装饰的测试,除非条件为真。

④unittest.expectedFailure 测试标记为失败。不管执行结果是否失败,统一标记为失败。

import unittest


class MyTest(unittest.TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    @unittest.skip("跳过次case")
    def test_skip(self):
        print("aaa")

    @unittest.skipIf(3 > 2, '当条件为true时跳过测试')
    def test_skip_if(self):
        print('bbb')

    @unittest.skipUnless(3 > 2, '跳过测试,除非条件为真')
    def test_skip_unless(self):
        print('ccc')

    @unittest.expectedFailure  # 不管执行结果是否失败,统一标记为失败
    def test_expexted_failure(self):
        self.assertEqual(2,2)

⑤setUp与setUpClass 区别:

setup():每个测试 case运行前运行

teardown():每个测试 case运行完后执行

setUpClass():必须使用@classmethod 装饰器,所有case运行前只运行一次

tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次

注:@是修饰符,classmethod 是python里的类方法

六、unittest批量执行

 

七、生成html测试报告

1、BeautifulReport

 ①下载:pip install BeautifulReport

 ②代码如下:

import unittest
from 其它.our_testcase import TestFunc
from BeautifulReport import BeautifulReport as bf
if __name__ == '__main__':
    suite = unittest.TestSuite()  # 定义一个测试集合
    tests = [TestFunc("test_square"), TestFunc("test_lower_str"),TestFunc("test_multi"),TestFunc("test_add")]  # 把写的用例加进来
    suite.addTests(tests)
    run = bf(suite)  # 实例化BeautifulReport模块
    run.report(filename='beautiful_reporter', description='测试练习', report_dir='../selenium', theme='theme_cyan')
    run.report() 
filename :测试报告的文件名称;
description:测试报告里面的用例名称展示
report_dir:测试报告的文件存储路径
theme:报告主题名 theme_default theme_cyan theme_candy theme_memories

2、HTMLTestRunner

①下载

http://tungwaiyip.info/software/HTMLTestRunner.html 下载后放在python的Lib目录下

然后需要修改HTMLTestRunner文件:

第94行:import StringIO 改为import io

第539行:self.outputBuffer = StringIO.StringIO() 改为:self.outputBuffer = io.StringIO()

第631行:print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime) 改为:print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))

第642行:if not rmap.has_key(cls): 改为:if not cls in rmap:

第766行:uo = o.decode(‘latin-1’) 改为:uo = o

第772行:ue = e.decode(‘latin-1’) 改为:ue = e

②代码如下:

③根据时间生成测试报告名称

time.time():获取当前时间戳。

time.ctime():当前时间的字符串形式。

time.localtime():当前时间的struct_time形式。

time.strftime():用来获得当前时间,可以将时间格式化为字符串。

PYTHON中时间日期格式化符号(区分大小写)如下页所示:

 

 

 

now = time.strftime("%Y-%m-%d %H_%M_%S")

report_path = "C:\\Users\\laohu\\workspace\\pydev_test\\case_piliang\\report\\" + now + "_result.html"

八、自动发送邮件

 

posted on 2021-08-26 18:26  豆芽*  阅读(164)  评论(0)    收藏  举报