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 ...
随机推荐
- BZOJ 3698: XWW的难题(有源汇上下界最大流)
题面 XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩阵A, ...
- elment-ui的validate
https://blog.csdn.net/qq469234155/article/details/84034816 validate()时elment-ui封装好的用于对整个表单进行验证valida ...
- unsigned和signed
int分为unsigned(无正负号)和signed(有正负号) 一般int默认为signed unsigned和unsigned int意思相同
- 2G以上的大文件如何上传
无法上传大文件是因为php.ini配置有限制了,这样限制了用户默认最大为2MB了,超过了就不能上传了,如果你确实要上传我们可以按下面方法来处理一下. 打开php.ini, 参数 设置 说明 fil ...
- ST表(模板)「 查询区间最值 」
The Water Problem HDU - 5443 「 第一部分nlogn预处理 第二部分O(1)询问 」 #include <iostream> #include <bi ...
- ajax案例_校验用户名
目录 ajax案例_校验用户名 代码下载 需求 流程 搭建环境 开发代码 1_jsp 1_servlet 1_service.dao 2_servlet 2_jsp 测试后,功能实现,完结撒花 aja ...
- 10月清北学堂培训 Day 4
今天是钟皓曦老师的讲授~ 今天的题比昨天的难好多,呜~ T1 我们需要找到一个能量传递最多的异构体就好了: 整体答案由花时间最多的异构体决定: 现在的问题就是这么确定一个异构体在花费时间最优的情况下所 ...
- python版本下载时时,官方目录web-based与executable和embeddable 的区别
背景:安装python时不知道选择哪个版本以及他们之间的意思. 1.X86和X86-64的区别:系統是32 bit 的版本还是 64bit 的 2.web-based ,executable , em ...
- JS-七大查找算法
顺序查找 二分查找 插值查找 斐波那契查找 树表查找 分块查找 哈希查找 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录).查找算法分类:1)静态查找和动态查找:注 ...
- RK3399 删除开机锁屏界面
CPU:RK3399 系统:Android 7.1 删除开机锁屏界面 diff --git a/frameworks/base/packages/SettingsProvider/res/values ...