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 ...
随机推荐
- javacv开发详解之1:调用本机摄像头视频
前言:javacv开发包是用于支持java多媒体开发的一套开发包,可以适用于本地多媒体(音视频)调用以及音视频,图片等文件后期操作(图片修改,音视频解码剪辑等等功能),这里只使用最简单的本地摄像头调用 ...
- Codeforces Global Round 4
目录 Contest Info Solutions A. Prime Minister B. WOW Factor C. Tiles D. Prime Graph E. Archaeology F1. ...
- 【説明する】hash
首先对于判重,我们能想到的方法有什么呢? 1)bool数组 2)set(集) 数组与集合的优缺点: 1.因为集合是对数组做的封装,所以,数组永远比任何一个集合要快. 2.数组声明了它容纳的元素的类型, ...
- Python中的各种排序问题
小书匠python排序 本章目录,快速浏览所需内容: 基本的排序 1.列表(list) 1.1按列表元素大小排序 1.2按列表元素的属性 2.字典(dictory) 3.元组(tuple)排序 3.1 ...
- manjaro 滚动更新后无法开机,Failed to start load kernel modules,nvidia驱动导致
今天滚动后无法开机,启动时显示Faild to start load kernel modules,卡在后面无法进入登录界面 systemctl status systemd-modules-load ...
- Tkinter 之Grid布局
一.参数说明 参数 作用 column 指定组件插入的列(0 表示第 1 列)默认值是 0 columnspan 指定用多少列(跨列)显示该组件 row 指定组件插入的行(0 表示第 1 行) ...
- ICEM-缺角正方体
原视频下载地址:https://yunpan.cn/cqKwGiMRiqN7I 访问密码 3377
- 20165223《网络对抗技术》Exp 8 Web基础
目录 -- Web基础 实践说明 实践目标 基础问答 实践内容 Web前端:HTML Web前端:JavaScript Web后端:MySQL Web后端:PHP SQL注入,XSS攻击测试 实验遇到 ...
- 2018-2019-2 网络对抗技术 20165231 Exp7 网络欺诈防范
实践内容(3.5分) 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建立冒名网站 (1分) (2)ettercap DNS spoof ...
- STM32 + RT Thread OS 串口通讯
1. 创建项目 a) 禁用Finsh和console b) 默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因 ...