python小测验7_python每日一练之单元测试

一、关于一些基本概念

Test fixture 官方文档把这个词翻译成“测试脚手架”,个人理解,是启动测试前的准备工作,根据使用API的不同,实现在每个用例执行前/后、类执行前/后、模块启动前/后的动作。

测试用例 检查特定输入的数据时的响应。

Test suite测试套件 用例执行的顺序

Test runner 执行和输出测试结果的组件

二、一个小例子

TestEx继承测试基类TestCase,test告诉测试运行者这个方法表示测试。不符合此命名规则的方法,执行测试时不会运行。__init__方法会执行三次,并且都是在测试用例执行前。

unittest.main() :

使用她可以方便的将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。

三、命令行执行

后面再补充

四、TestCase类

用例执行前/后需要执行的指令。

1.setUp()

每个用例执行前都会执行,如果此方法有问题,将会被测试框架视为这个测试失败,用例方法和tearDown不会被执行。如果setUp成功运行,不管用例方法结果如何,tearDown()都会被执行。

2.tearDown()

用例执行结束后运行。

3.setUpClass()

当测试套件遇到来自新类的测试时,将调用前一个类的tearDownClass()(如果有),然后调用这个新类的setupClass()。

如果在setUpClass期间引发异常,则不会运行该类中的测试,也不会运行tearDownClass。跳过的类将不会运行setUpClass或tearDownClass。如果该异常是SkipTest异常,则该类将被报告为已跳过而不是错误。

4.tearDownClass()

运行完所有测试后

classTestAnimal(unittest.TestCase):def __init__(self, *args, **kwargs):

super().__init__(*args, **kwargs)@classmethoddefsetUpClass(self):

self.animal_object= Animal(‘animal‘, 35)print(‘类方法setUp‘)

@classmethoddeftearDownClass(self):print(‘类方法 tearDown‘)defsetUp(self):print(‘我会在用例执行前执行‘)deftearDown(self):print(‘我会在用例执行后执行‘)deftest_test3_1(self):print(‘我开始了‘)

re1= self.animal_object.test4(1)

self.assertEqual(re1,1, ‘测试失败‘)

re3=self.animal_object.test4(None)

self.assertIsNotNone(re3,‘测试失败‘)print(‘如果我前面断言失败了,我不会执行‘)

self.assertIsNotNone(re1,‘测试失败‘)deftest_test3_2(self):print(‘我在后面‘)

re2=self.animal_object.test4(True)

self.assertTrue(re2,‘测试失败‘)if __name__==‘__main__‘:

test_suite=unittest.TestSuite()

tests= [TestAnimal(‘test_test3_2‘), TestAnimal(‘test_test3_1‘)]

test_suite.addTests(tests)

runner=unittest.TextTestRunner()

runner.run(test_suite)

5.setupModule()

与前面类似,不过这里指的是模块。如果setUpModule中引发了异常,则模块中的任何测试都不会运行,而tearDownModule也不会运行。如果该异常是SkipTest异常,则该模块将被报告为已跳过而不是错误。

6.tearDownModule

运行完所有的测试后

7.断言

assertEqual(a, d, msg=‘测试失败时打印的信息‘)

assertNotEqual(a,b, msg=‘测试失败时打印的信息‘)

assertTrue(a,msg=‘测试失败时打印的信息‘)  断言a是否为真

assertFalse(a,msg=‘‘)断言a是否为假

assertIs(a,b,msg=‘...‘) 断言a是否是b

assertNotIs(a,b,msg=‘‘)断言a不是b

asserIsInstance(a,d,msg=‘‘)断言a是b的一个实例

assertNotIsInstance(a, b,msg=‘‘)

五、装饰器

2.@unittest.skipIf(condition, reason) condition为真时跳过,输出原因

2.@unittest.skipUnless(condition, reason) condition为假时跳过,输出原因

3.@unittest.expectedFailure 把测试标记为失败,如果测试不通过,会被认为测试成功,反之失败。

4.exception unittest.skipTest(reason) 引发此异常以跳过一个测试。存疑~

六、TestSuite和TextTestRunner

1.test_suit.addTest()实现执行顺序

test_suit=unittest.TestSuite()

tests=[TestClass(‘testcase1),...]

test_suit.addTests(tests) # 添加case列表,或者addTest(TestClass(‘testcase1))逐个添加。非test开头的方法也可添加进来作为测试用例使用。

runner=unittest.TextTestRunner()

runner.run(test_suit)

2.unittest.TestLoader() 暂未展开

suit.addTests(unittest.TestLoader().loadTestsFromCase(TestClass)) 加载testCase,测试方法按照test_后面的字母顺序执行

七、HTMLReport

# 测试套件

suite = unittest.TestSuite()

# 测试用例加载器

loader = unittest.TestLoader()

# 把测试用例加载到测试套件中

suite.addTests(loader.loadTestsFromTestCase(TestStringMethods))

# 测试用例执行器

runner = HTMLReport.TestRunner(report_file_name=‘test‘,  # 报告文件名,如果未赋值,将采用“test+时间戳”

output_path=‘report‘,  # 保存文件夹名,默认“report”

title=‘测试报告‘,  # 报告标题,默认“测试报告”

description=‘无测试描述‘,  # 报告描述,默认“测试描述”

thread_count=1,  # 并发线程数量(无序执行测试),默认数量 1

thread_start_wait=3,  # 各线程启动延迟,默认 0 s

sequential_execution=False,  # 是否按照套件添加(addTests)顺序执行,

# 会等待一个addTests执行完成,再执行下一个,默认 False

# 如果用例中存在 tearDownClass ,建议设置为True,

# 否则 tearDownClass 将会在所有用例线程执行完后才会执行。

# lang=‘en‘

lang=‘cn‘  # 支持中文与英文,默认中文

)

# 执行测试用例套件

runner.run(suite)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值