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. docker学习(六)

    一.Dockerfile使用 Dockerfile 可以允许用户创建自定义的镜像. 1.基本结构Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行.一般的,Dockerfile ...

  2. HashMap与HashTable的理解与区别

    Hashtable是java一开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2.虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了 ...

  3. umeditor+粘贴word图片

    图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码 目前限chrome浏览器使用,但是项目要求需要支持所有的浏览器,包括Windows和macOS系统.没有办 ...

  4. Peaks 线段树合并

    Peaks 线段树合并 \(n\)个带权值\(h_i\)山峰,有\(m\)条山峰间双向道路,\(q\)组询问,问从\(v_i\)开始只经过\(h_i\le x\)的路径所能到达的山峰中第\(k\)高的 ...

  5. (4)打鸡儿教你Vue.js

    模板语法: <div id="app"> <p>{{ message }}</p> </div> html 使用 v-html 指令 ...

  6. P1095 守望者的逃离——DP?贪心?

    https://www.luogu.org/problem/P1095 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大 ...

  7. centos7 安装 mysql5.6(MySQL-5.6.44-1.el7.x86_64.rpm-bundle.tar)

    1.卸载MariaDB rpm -qa | grep -i mariadb rpm -e --nodeps mariadb-libs--.el7.x86_64 2.卸载已有Mysql 卸载旧版本mys ...

  8. Js 之生成二维码插件(jquery.qrcode.js)

    一.下载 链接:https://pan.baidu.com/s/1cMjaCYQ_buZNT5XRRjuNTA提取码:myqm 二.效果图 三.代码 <!DOCTYPE html> < ...

  9. codeforces1187E

    题目链接:http://codeforces.com/problemset/problem/1187/E E. Tree Painting You are given a tree (an undir ...

  10. HNOI2009有趣的数列

    首先next_permutation打表,发现Cat规律. 其实考试的时候这么做没什么问题,而且可以节省异常多的时间,那么现在我们来想一下why. 首先我拿模型法解释一下,我们把2n个数看成2n个人, ...