pycharm中测试的三种模式(unittest框架、pytest框架、普通模式)

一、python运行脚本的三种模式

通过查阅资料才发现,原来python的运行脚本的方式有多种:

普通模式运行,不会自动去加载测试用例执行
unittest 测试框架运行模式,可以自动去发现testcase并执行

pytest测试框架运行模式,可以自动执行所有测试用例


重要原则:第一次按照何种模式执行测试用例,后续都会按照这种方式去执行

因为如上2步,我们都是按照pytest模式去执行的,即使添加的main()函数,最终默认的执行方式都是pytest模式。
二、pycharm中 no tests were found

首次使用测试用例时,按照网上教程会首次出现 no tests were found 的情况。


上图中会出现no test were found的情况。
根本原因是在定义的类中的函数没有以test开头

三、理解unittest框架中的setUpClass、setUp、tearDown、tearDownClass

python unitest单元测试框架中,有几个特殊的情况如下:

setUp():每个测试方法运行前运行,测试前的初始化工作。一条用例执行一次,若N次用例就执行N次,根据用例的数量来定。

setUpClass():所有的测试方法运行前运行,为单元测试做前期准备,但必须使用@classmethod装饰器进行修饰,整个测试过程中只执行一次。

tearDown():每个测试方法运行结束后运行,测试后的清理工作。一条用例执行一次,若N次用例就执行N次。

tearDownClass():所有的测试方法运行结束后运行,为单元测试做后期清理工作,但必须使用@classmethod装饰器进行修饰,整个测试过程中只执行一次。

四、默认使用pytest框架去执行unittest框架中的测试用例


此时程序中运行默认使用pytest框架,如图中所示:


五、取消默认并且在unittest框架下运行

pycharm执行某些程序时会默认在unittest框架下执行,从而导致程序报错,怎样解决这个问题呢?

File->setting->Tools->Python Intergrated Tools->Default test runner->py.test

选择后如果显示未安装,请先安装py.test


六、普通运行模式,导出测试报告

import unittest
import time,HTMLTestRunner


class AlienTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("TestCase  start running ")

    def test_1_run(self):
        print("hello world_1")

    def test_2_run(self):
        print("hello world_2")

    def test_3_run(self):
        print("hello world_3")


if __name__ == '__main__':
    print('hello world')
    suite = unittest.makeSuite(AlienTest)
    now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())
    filename = "/Users/test/The_Order_Of_TestCase/Report/" + now + "_result.html"
    fp = open(filename, 'wb')
    runner = HTMLTestRunner.HTMLTestRunner(
        stream=fp,
        title=u'ALIEN测试报告',
        description=u'ALIEN用例执行情况:')

    runner.run(suite)
    # 关闭文件流,不关的话生成的报告是空的
    fp.close()

默认是使用unittest模式运行的,结果如下,其实这样不会执行main()函数,更不会导出报告

最终通过创建普通模式的运行模式,然后按照如下方式可以运行

最终的测试报告如下:


七、总结

(1)使用pytest/unittest测试框架时候,不需要main()函数,系统可以自动识别测试用例并执行;如果单纯为了执行测试用例,不用写main()函数也可以.
(2)即使包含main()函数,点击它去执行,也不会去执行main()函数。
(3)具体是使用哪个测试框架执行,不是通过main()函数设置的,在别的地方。

(4)执行所有测试用例的方法: 
其实只要不点击单个测试用例的定义函数的行,无论点击哪一行,即使点击main()函数一行,或者空白行,都可以执行所有测试用例

补充:

  • 使用普通模式运行,系统会运行main()函数里面所有的函数,包括非TestCase的函数,当main()函数中有测试报告需要导出的时候,需要使用普通模式运行。可以通过main()函数实现单一用例的执行。
  • 使用pytest或unittest测试框架,在main函数中只执行TestCase函数,其他函数不执行。

重要参考:https://blog.csdn.net/chenmozhe22/article/details/81700504
————————————————
版权声明:本文为CSDN博主「板儿爷」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39852676/article/details/87723955

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值