一、直接使用TestCase

注意所有测试方法都需要以test开头。代码如下:

import unittest

class Test1(unittest.TestCase):
@classmethod
def setUpClass(self):
print("execute setUpClass") @classmethod
def tearDownClass(self):
print("execute tearDownClass") def setUp(self):
print("execute setUp") def tearDown(self):
print("execute tearDown") def test_one(self):
print('execute test_one')
self.assertTrue('FOO'.isupper()) def test_two(self):
print('execute test_two') if __name__ == '__main__':
unittest.main()

执行如下:

二、使用TestSuite

直接写TestCase执行时是按字母排序的顺序执行的,如果要设定测试用例的执行先后顺序则需要将TestCase封装到TestSuite。代码如下:

import unittest

class Test2(unittest.TestCase):
@classmethod
def setUpClass(self):
print("execute setUpClass") @classmethod
def tearDownClass(self):
print("execute tearDownClass") def setUp(self):
print("execute setUp") def tearDown(self):
print("execute tearDown") def test_one(self):
print('execute test_one')
self.assertTrue('FOO'.isupper()) def test_two(self):
print('execute test_two') if __name__ == '__main__':
suite = unittest.TestSuite()
# Test2是要测试的类名,test_two是要执行的测试方法
suite.addTest(Test2("test_two"))
suite.addTest(Test2("test_one"))
runner = unittest.TextTestRunner()
runner.run(suite)

执行如下,可以看到先添加的test_two先执行:

三、使用HTMLTestRunner

我们可能还会希望生成一个简单的HTML报告,可使用HTMLTestRunner实现。但pypi官网上最新的都是只支持python2.x的0.8.2版本。可将以下代码自行保存成HTMLTestRunner.py放到自己项目目录下

 

代码如下:

import unittest
import HTMLTestRunner class Test3(unittest.TestCase):
@classmethod
def setUpClass(self):
print("execute setUpClass") @classmethod
def tearDownClass(self):
print("execute tearDownClass") def setUp(self):
print("execute setUp") def tearDown(self):
print("execute tearDown") def test_one(self):
print('execute test_one')
self.assertTrue('FOO'.isupper()) def test_two(self):
print('execute test_two') if __name__ == '__main__':
suite = unittest.TestSuite()
# Test3是要测试的类名,test_one是要执行的测试方法
suite.addTest(Test3("test_one"))
suite.addTest(Test3("test_two"))
# 实践中发现执行时的当前路径,不一定是此文件所在的文件夹,所以使用绝对路径
# print(f"{os.getcwd()}")
filename = 'F:\\PycharmProjects\\test3\\apptestresult.html'
fb = open(filename, 'wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fb, title="测试HTMLTestRunner", description="测试HTMLTestRunner")
runner.run(suite)
fb.close()

执行如下:

报告如下:

四、HTMLTestRunner未生成报告问题处理

4.1 pytest干扰

如果python环境中安装了pytest,那么默认运行时会是Run 'py.test for'(如下图所示),这时if __name__ == "__main__"下的语句是不被执行的所以报告肯定不会生成(原理未知)。

些时需要依次点开pycharm菜单----Run----Edit Configurations...自行添加一个运行配置,如下图

4.2 路径问题

一是注意自己把报告输出到了哪个位置,特别是如果有几个地方都会输出报告时不要弄混了,搞得自己在浏览器中刷新半天没看到有变化,认为没生成报告。

二是实践中通过os.getcwd()发现python运行时的目录不一定是当前目录,所以如果报告使用相对路径然后又没看到有报告生成,那就注意看os.getcwd()返回的运行路径是不是当前文件夹。

Python单元测试框架:unittest(二)的更多相关文章

  1. Python单元测试框架unittest使用方法讲解

    这篇文章主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容,需要的朋友可以参考下   概 ...

  2. Python单元测试框架unittest之深入学习

    前言 前几篇文章该要地介绍了python单元测试框架unittest的使用,本篇文章系统介绍unittest框架. 一.unittest核心工作原理 unittest中最核心的四个概念是:test c ...

  3. Python单元测试框架unittest之单用例管理(一)

    一.概述 本文介绍python的单元测试框架unittest,unittest原名为PyUnit,是由java的JUnit衍生而来,这是Python自带的标准模块unittest.unittest是基 ...

  4. Python单元测试框架unittest

    学习接口自动化测试时接触了unittest单元测试框架,学习时参照了虫师编写的<selenium2自动化测试实战>,个人觉得里面讲的例子还比较容易理解的. 一.基础 1.main()和框架 ...

  5. Python单元测试框架unittest重要属性 与 用例编写思路

    前言 本文为转载,原文地址作者列举python unittest这个测试框架的主要属性和 测试用例思路 unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行, ...

  6. python单元测试框架-unittest(一)

    简介 unittest单元测试框架不仅可以适用于单元测试,还可以使用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果. ...

  7. Python单元测试框架unittest之单用例管理(二)

    概述 利用python进行测试时,测试用例的加载方式有2种: 一种是通过unittest.main()来启动所需测试的测试模块,上篇文章就是使用的这种方式: 一种是添加到testsuite集合中再加载 ...

  8. python单元测试框架-unittest(二)之断言

    断言内容是自动化脚本的重要内容,正确设置断言以后才能帮助我们判断测试用例执行结果. 断言方法 assertEqual(a, b) 判断a==b assertNotEqual(a, b) 判断a!=b ...

  9. Python单元测试框架——unittest

    测试的常用规则 一个测试单元必须关注一个很小的功能函数,证明它是正确的: 每个测试单元必须是完全独立的,必须能单独运行.这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作.通常通过se ...

  10. Python单元测试框架 unittest详解

    一 整体结构概览 unittest原名为PyUnit,是由java的JUnit衍生而来.对于单元测试,需要设置预先条件,对比预期结果和实际结果. TestCase :通过继承TestCase类,我们可 ...

随机推荐

  1. golang依赖管理

    目录 使用GOPATH管理依赖 临时GOPATH 依赖查找路径 使用GOVENDER管理依赖 使用GO111MODULE管理依赖 Usage 常用命令列表 不常用命令 使用示例 开启GO111MODU ...

  2. jdbc-手写Java方法连接数据库

    一.关键四元素   ①    com.mysql.jdbc.Driver      mysql数据库连接jar包.   获取途径: 链接:https://pan.baidu.com/s/1SFcjuu ...

  3. thinkphp5 不使用form,用input+ajax异步上传图片

    不支持$this->request->file()获取图片 后台接收文件请使用$_FILE 正文开始: HTML <div class="upload"> ...

  4. 详解 Discuz 的 PHP经典加密解密函数 authcode

    函数注释: // $string: 明文 或 密文 // $operation:DECODE表示解密,其它表示加密 // $key: 密匙 // $expiry:密文有效期 function auth ...

  5. Test Test...

    标题: Test(一级标题) Test(二级标题) Test(三级标题) 列表: test(列表) Alpha Beta Gamma test 2 Delte Epsilon 链接: 点兔成金斐波那契 ...

  6. 十六, Oracle约束

    前言 数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性 ...

  7. windows 查看被占用的端口信息

    如何查询 1.使用命令:netstat -aon|findstr "8080" 查询被占用的端口的进程 PID 2.使用命令:tasklist | findstr "15 ...

  8. java制作一个简单的抽签程序

    首先需要导入import java.util.Random;才能使用随机类Random:Random生成随机数介绍:https://www.cnblogs.com/prodigal-son/p/128 ...

  9. 使用sys模块写一个软件安装进度条

    import sys,time for i in range(50): sys.stdout.write('#') sys.stdout.flush() #强制刷新将内存中的文件写一条,输出一条. t ...

  10. jQuery学习(二)

    操作DOM对象: 修改文本: jQuery对象的text()和html()方法可以用来获取节点的文本内容和HTML文本.而当你给方法传入参数时,这两个方法可以被用于设置jQuery的文本内容. 还是以 ...