selenium3 web自动化测试框架 四:Unittest介绍及项目实战中的运用
unittest介绍及运用,可以参考之前写的文章,除了未结合web自动化演示,基础知识都有了
https://www.cnblogs.com/wuzhiming/p/8858305.html
unittest在自动化中的基础使用
下例演示用例的运行
# -*- coding:utf-8 -*-
import unittest
from selenium import webdriver
from business.register_business import RegisterBusiness class TestLoginPage(unittest.TestCase): @classmethod
def setUpClass(cls):
print("所有步骤前置操作(测试计划):测试计划之前只执行一次") @classmethod
def tearDownClass(cls):
print("所有步骤后置操作(测试计划):测试计划结束后只执行一次") def setUp(self):
print("每条用例执行的前置步骤")
self.driver = webdriver.Chrome()
url = "http://www.5itest.cn/register"
self.driver.get(url)
self.driver.maximize_window()
self.register_business = RegisterBusiness(self.driver) def tearDown(self):
print("每条测试用例的后置步骤")
self.driver.close() def test_base_case(self):
test_login = self.register_business.base_case("test@163.com","admin","") def test_login_email_error(self):
test_loginemailerror = self.register_business.login_email_error("","admin","") @unittest.skip("就是不执行下面的用例")
def test_must_run(self):
print("必须执行我") if __name__ == "__main__":
unittest.main()
如果想自定义用例的运行顺序可以参考上面链接中的用例操作即可
单次运行多个文件中的大量用例
演示用例1
# -*- coding:utf-8 -*-
'''
filename : unittest_test1.py
'''
import unittest
from selenium import webdriver
from business.register_business import RegisterBusiness class TestLoginPage(unittest.TestCase): @classmethod
def setUpClass(cls):
print("All 只执行一次") @classmethod
def tearDownClass(cls):
print("End 只执行一次") def setUp(self):
print("start 每条用例执行的前置步骤") def tearDown(self):
print("end 每条测试用例的后置步骤") def test_base_case1(self):
print("第一条用例") def test_base_case2(self):
print("第二条用例") @unittest.skip("就是不执行下面的用例")
def test_must_run(self):
print("必须执行我") if __name__ == "__main__":
unittest.main()
演示用例2
# -*- coding:utf-8 -*-
'''
filename:unittest_test2.py
''' import unittest class TestLoginPage(unittest.TestCase): @classmethod
def setUpClass(cls):
print("All 只执行一次") @classmethod
def tearDownClass(cls):
print("End 只执行一次") def setUp(self):
print("start 每条用例执行的前置步骤") def tearDown(self):
print("end 每条测试用例的后置步骤") def test_base_caseA(self):
print("第一条用例") def test_base_caseB(self):
print("第二条用例") def test_must_runC(self):
print("必须执行我") if __name__ == "__main__":
unittest.main()
单次运行上述两个文件中的用例代码
# -*- coding:utf-8 -*-
import unittest
import os class MyTestCase(unittest.TestCase):
def test_allcase(self):
#os.getcwd()获取当前路径
#os.path.join 连接两个或更多的路径名组件
case_path = os.path.join(os.getcwd())
suite = unittest.defaultTestLoader.discover(case_path,'unittest_t*.py')
unittest.TextTestRunner().run(suite) if __name__ == '__main__':
unittest.main()
生成测试报告
# -*- coding:utf-8 -*-
import unittest
import os
import datetime
from HTMLTestRunner_cn import HTMLTestRunner class TestLoginPage(unittest.TestCase): @classmethod
def setUpClass(cls):
print("All 只执行一次") @classmethod
def tearDownClass(cls):
print("End 只执行一次") def setUp(self):
print("start 每条用例执行的前置步骤") def tearDown(self):
print("end 每条测试用例的后置步骤") def test_base_case1(self):
print("第一条用例") def test_base_case2(self):
print("第二条用例") @unittest.skip("就是不执行下面的用例")
def test_must_run(self):
print("必须执行我") if __name__ == "__main__":
report = os.path.join('F:/python_stack/python_autotest/report/report.html')
suite1 = unittest.TestSuite()
suite1.addTests([TestLoginPage("test_base_case1"),TestLoginPage("test_base_case2"),TestLoginPage("test_must_run")])
with open(report,'wb') as f:
runner2 = HTMLTestRunner(stream=f,title='Test Result',description='operator:admin',verbosity=2)
runner2.run(suite1)
print('report is done')
#os.path.dirname(__file__)的作用是 返回脚本的路径,即文件路径中所在的目录
report_path = os.path.dirname(report)
print(report_path)
#os.chdir() 方法用于改变当前工作目录到指定的路径。
os.chdir(report_path)
stamp = datetime.datetime.strftime(datetime.datetime.now(),"%Y-%m-%d-%H-%M-%S")
report_new_name = TestLoginPage.__name__ + 'report'+ stamp +'.html'
os.rename('report.html',report_new_name)
用例执行失败后在指定目录生成错误截图
def tearDown(self):
print("每条测试用例的后置步骤")
#错误截图
for method_name,error in self._outcome.errors:
if error:
case_name = self._testMethodName
#保存文件的路径必须提前创建好,不然保存截图失败
image_path = os.path.join(os.getcwd() + '\\' + "image" + "\\"+ case_name + ".png")
self.driver.save_screenshot(image_path)
self.driver.close()
selenium3 web自动化测试框架 四:Unittest介绍及项目实战中的运用的更多相关文章
- selenium3 web自动化测试框架 三:项目实战中PO模型的设计与封装
po模型设计思想 Page Object 模式主要是将每个页面设计为一个class,其中包含页面中的需要测试的元素(按钮,输入框,标题等),这样在Selenium测试页面中可以通过调取页面类来获取页面 ...
- selenium3 web自动化测试框架 五: 数据驱动简介及基础使用
1.数据驱动概述 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动.简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使 ...
- selenium3 web自动化测试框架 二:页面基础操作、元素定位方法封装、页面操作方法封装
学习目的: 掌握自动化框架中需要的一些基础web操作 正式步骤: 使用title_contains检查页面是否正确 # -*- coding:utf-8 -*- import time from se ...
- Python web自动化测试框架搭建(功能&接口)——unittest介绍
Python UnitTest测试框架介绍 1) TestCase:所有测试用例类继承的基本类, TestCase的实例就是测试用例 2) TestSuite:测试套件 ...
- python web自动化测试框架搭建(功能&接口)——接口用例实现
测试用例基类: # coding=utf-8 import unittest import Logger log = Logger.Loger() class BaseCase(unittest.Te ...
- python web自动化测试框架搭建(功能&接口)——接口公共方法
接口公共方法有:数据引擎.http引擎.Excel引擎 1.数据引擎:获取用例.结果检查.结果统计 # -*- coding:utf-8 -*- from XlsEngine import XlsEn ...
- python web自动化测试框架搭建(功能&接口)——接口测试模块
Python接口测试采用python读取excel的方法,通过requests库发送请求和接收响应.模块有: Data:用于存放excel用例的,用例格式: iutil: 接口公共方法,数据引擎.ht ...
- python web自动化测试框架搭建(功能&接口)——功能测试模块
功能测试使用selenium,模块有: 1.futil: 公共方法,如元素高亮显示 # coding=utf-8 """高亮显示元素""" ...
- python web自动化测试框架搭建(功能&接口)——测试用例执行和结果收集
由于unittest框架中结果收集在不同文件中,所以此处重写结果收集方法,加入执行时间,失败信息,失败截图等 TestRunner.py # coding=utf-8 import sys impor ...
随机推荐
- Redis的下载、安装及启动
一.下载Redis 1. redis 的下载路径 https://pan.baidu.com/s/1tdMzOlcTlFC7Z3a3I_59hQ 提取码:5tgy 二.安装Redis cd到当前解压目 ...
- bootstrap之collapse
<div class="container"> <!--该button可以控制div是否显示 1.首先给button设置data-toggle="col ...
- PHP流程控制之嵌套if...else...elseif结构
还记得本章开篇我们讲了一个王思总同学的例子: 王同学是生活极度充满娱乐化和享受生活的人.他抵达北京或者大连的时候做的事,他抵达后做的事情,如下:直线电机参数 半夜到达,先去夜店参加假面舞会 早上抵达, ...
- 二十.Nginx反向代理、Nginx的TCP/UDP调度器、Nginx常见问题处理
proxy client web1 web2 1.nginx反向代理 使用Nginx实现Web反向代理功能,实现如下功能: 后端Web服务器两台(web1 192.168.2.100 web2 ...
- zabbix数据的时序-
gj的proxy服务器经过重启之后时序有变化. zabbix数据库中数据的存储是以哪方为准server端还是agent端, 触发事件跟恢复时间反了,本应该恢复的事件在数据库中查询event,得到的事件 ...
- hihoCoder 2 * problem
1792 模拟,转化为二进制后逐位比较 1819 线段树维护区间加 维护每个数加了多少 每次弹出栈顶元素后栈顶位置注意清空 1792 #include <iostream> #includ ...
- luogu 1712
按区间长度降序排序维护区间指针 [l, r],第 l ~ r 条线段 表示当前区间可以满足条件那么 r 后移一定不是更优的因此 l 前移,使得 r 后移过程中取最小值更新 answer #includ ...
- NetworkX系列教程(1)-创建graph
小书匠Graph图论 研究中经常涉及到图论的相关知识,而且常常面对某些术语时,根本不知道在说什么.前不久接触了NetworkX这个graph处理工具,发现这个工具已经解决绝大部分的图论问题(也许只是我 ...
- P4514 上帝造题的七分钟——二维树状数组
P4514 上帝造题的七分钟 求的是矩阵里所有数的和: 维护四个树状数组: #include<cstdio> #include<cstring> #include<alg ...
- Hadoop(4)MapReduce 任务的推测(speculative)执行
Straggle(掉队者)是指那些跑的很慢但最终会成功完成的任务.一个掉队的Map任务会阻止Reduce任务开始执行. Hadoop不能自动纠正掉队任务,但是可以识别那些跑的比较慢的任务,然后它会产生 ...