unittest基本框架
import unittest
class RunCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('所有case执行之前的前置')
@classmethod
def tearDownClass(cls):
print('所有case执行之后的后置')
def setUp(self):
print('每条case之前执行')
def tearDown(self):
print('每条case之后执行')
@unittest.skip('') # 无条件跳过此条case
def test_case01(self):
"""第一条case打开网页"""
print('我是case01')
def test_case02(self):
"""第二条case输入账号"""
print('我是case02')
if __name__ == '__main__':
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(RunCase('test_case01'))
suite.addTest(RunCase('test_case02'))
# 运行测试集
runner = unittest.TextTestRunner()
runner.run(suite)
1、case副标题
def test_case01(self):
"""第一条case打开网页"""
print('我是case01')
在case函数下用三个引号来描述此条case的测试内容,使报告看起来更清晰明确。
2、@classmethod的使用
官方说明:classmethod
是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法
对此我不是很理解,但是在unittest
中使用后的效果如图:
关于装饰器、类方法的知识后续还要继续学习,这里仅做一个记录。
3、@unittest.skip(’’)的使用
在某条case前加上@unittest.skip('这里写跳过的原因 ' )
,则会无条件跳过这条case。
其他几种用法参考下面这篇博文
https://blog.youkuaiyun.com/heatdeath/article/details/72633303
4、生成测试报告及报告路径设置
需要导入这两个模块
from HTMLTestRunner import HTMLTestRunner
import os
修改main
函数
if __name__ == '__main__':
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(RunCase('test_case01'))
suite.addTest(RunCase('test_case02'))
# 生成测试报告
file_path_father = os.path.abspath(os.path.dirname(os.getcwd()))
file_path = os.path.join(file_path_father + "\\report\\" + 'run_case.html')
f = open(file_path, 'wb')
runner = HTMLTestRunner(stream=f,
verbosity=2,
title='验证测试报告',
description='这是一份测试报告')
# 运行测试集
runner.run(suite)
a.运行分析
HTMLTestRunner 的 HTMLTestRunner 方法 跟 unittest.TextTestRunner 方法 一样,支持测试结果信息的收集
b.报告路径分析
考虑到case脚本可能会被拷贝到其他电脑上运行,所以报告存放路径最好不要写成绝对路劲。当前测试报告的绝对路径是file_path = "D:\F\pyworkspace\SeleniumPython\report\run_case.html"
工程目录如下图:
这里我在学习的时候遇到一个问题,看的教程中老师教的是用os.getcwd()
获取当前工程根目录,然后和"\\report\\" + 'run_case.html'
拼接就得到了报告所在路径。(老师教程中的目录结构与我截图一致)
file_path = os.path.join(os.getcwd()+"\\report\\" + "first_case.html")
但是实际在run_case.py
里使用这个方法得到的路径其实是run_case.py
文件所在路径,即D:\F\pyworkspace\SeleniumPython\case
,显然跟"\\report\\" + 'run_case.html'
拼接得到的路径是错误的。
综上所述,我需要的是当前运行文件run_case.py
的父级目录,然后跟 "\\report\\" + 'run_case.html'
拼接才能得到正确路径。不得不说老师的视频给了我很大误导,不过我后来多番度娘,python中有语句是可以直接获取到父级目录的,一下子迎难而解,心情很是激动。
file_path_father = os.path.abspath(os.path.dirname(os.getcwd()))
file_path = os.path.join(file_path_father + "\\report\\" + 'run_case.html')
# 此处注意斜杠的转义
得到的路径即:file_path = "D:\F\pyworkspace\SeleniumPython\report\run_case.html
以下是python中获取路径的方法
①.获取当前路径
os.getcwd()
②.获取当前路径的父级路径
os.path.abspath(os.path.dirname(os.getcwd()))
③.获取当前路径的前两级路径
os.path.abspath(os.path.abspath(os.path.dirname(os.getcwd())))