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介绍及项目实战中的运用的更多相关文章

  1. selenium3 web自动化测试框架 三:项目实战中PO模型的设计与封装

    po模型设计思想 Page Object 模式主要是将每个页面设计为一个class,其中包含页面中的需要测试的元素(按钮,输入框,标题等),这样在Selenium测试页面中可以通过调取页面类来获取页面 ...

  2. selenium3 web自动化测试框架 五: 数据驱动简介及基础使用

    1.数据驱动概述 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动.简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使 ...

  3. selenium3 web自动化测试框架 二:页面基础操作、元素定位方法封装、页面操作方法封装

    学习目的: 掌握自动化框架中需要的一些基础web操作 正式步骤: 使用title_contains检查页面是否正确 # -*- coding:utf-8 -*- import time from se ...

  4. Python web自动化测试框架搭建(功能&接口)——unittest介绍

    Python UnitTest测试框架介绍 1)         TestCase:所有测试用例类继承的基本类, TestCase的实例就是测试用例 2)         TestSuite:测试套件 ...

  5. python web自动化测试框架搭建(功能&接口)——接口用例实现

    测试用例基类: # coding=utf-8 import unittest import Logger log = Logger.Loger() class BaseCase(unittest.Te ...

  6. python web自动化测试框架搭建(功能&接口)——接口公共方法

    接口公共方法有:数据引擎.http引擎.Excel引擎 1.数据引擎:获取用例.结果检查.结果统计 # -*- coding:utf-8 -*- from XlsEngine import XlsEn ...

  7. python web自动化测试框架搭建(功能&接口)——接口测试模块

    Python接口测试采用python读取excel的方法,通过requests库发送请求和接收响应.模块有: Data:用于存放excel用例的,用例格式: iutil: 接口公共方法,数据引擎.ht ...

  8. python web自动化测试框架搭建(功能&接口)——功能测试模块

    功能测试使用selenium,模块有: 1.futil: 公共方法,如元素高亮显示 # coding=utf-8 """高亮显示元素""" ...

  9. python web自动化测试框架搭建(功能&接口)——测试用例执行和结果收集

    由于unittest框架中结果收集在不同文件中,所以此处重写结果收集方法,加入执行时间,失败信息,失败截图等 TestRunner.py # coding=utf-8 import sys impor ...

随机推荐

  1. SCSS 教程

    https://www.jianshu.com/p/a99764ff3c41 https://www.sass.hk/guide/ 1. 使用变量; sass让人们受益的一个重要特性就是它为css引入 ...

  2. OFDM为什么把高频子载波作为保护频带

    实际中发射机接收机的低通滤波器并不是理想低通滤波器,在[-W/2,W/2]之外的一个小范围(对应使用旁边的频带的用户的高频)之内也会有一些不可忽略的能量:并且,实际低通滤波器在高频子载波上的幅度也会比 ...

  3. 【HTTP】图解HTTPS

    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...

  4. Unity 与 Android 互调用

    https://www.jianshu.com/p/b5e3cfcdf081 Unity 项目中一些需要访问安卓操作系统的功能,比如获取电量,wifi 状态等,需要 Unity 启动安卓系统的 Bro ...

  5. 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)

    分析:有向图里面找最短路径,原理就是每一步都走距离自己最近的路, 一旦发现走一步可以到,那么这个一定是最短的. #include <bits/stdc++.h> using namespa ...

  6. 遇到bug如何处理

    issue中查询是否有相似bug assert / try-except / IDE单步调式 框架可以查询源码或者查询官方文档

  7. Spring - 环境安装

    安装IDEA的非Community版本和Java的包之后就可以用Java来HelloWorld了. 然后去这个链接:https://github.com/spring-guides/gs-rest-s ...

  8. zabbix (6) 为主机添加监控项,触发器,动作

    先了解一下zabbix的相关概念 监控项(iterms):一个具体的指标,比如某个人的体重. 键(key):通过定义(自定义或者zabbix自带)的key获取相应指标的具体值,比如这个人的体重50斤 ...

  9. shell 脚本同时对远程多台机器执行命令

    脚本1:需要机器之间免密 ssh-copy-id [-i [identity_file]] [user@]machine #!/bin/bash # ------------------------- ...

  10. Jenkins中插件下载失败的解决办法

    插件下载失败原因:通过国外服务器下载镜像,有较高的失败率,某些插件下载失败或者中断会引起其他有依赖关系的插件也下载失败 解决方案:1. 使用VPN.2. Jenkins镜像地址改为国内镜像地址:系统管 ...