unittest介绍及运用,可以参考之前写的文章,除了未结合web自动化演示,基础知识都有了

https://www.cnblogs.com/wuzhiming/p/8858305.html

unittest在自动化中的基础使用


下例演示用例的运行

  1. # -*- coding:utf-8 -*-
  2. import unittest
  3. from selenium import webdriver
  4. from business.register_business import RegisterBusiness
  5.  
  6. class TestLoginPage(unittest.TestCase):
  7.  
  8. @classmethod
  9. def setUpClass(cls):
  10. print("所有步骤前置操作(测试计划):测试计划之前只执行一次")
  11.  
  12. @classmethod
  13. def tearDownClass(cls):
  14. print("所有步骤后置操作(测试计划):测试计划结束后只执行一次")
  15.  
  16. def setUp(self):
  17. print("每条用例执行的前置步骤")
  18. self.driver = webdriver.Chrome()
  19. url = "http://www.5itest.cn/register"
  20. self.driver.get(url)
  21. self.driver.maximize_window()
  22. self.register_business = RegisterBusiness(self.driver)
  23.  
  24. def tearDown(self):
  25. print("每条测试用例的后置步骤")
  26. self.driver.close()
  27.  
  28. def test_base_case(self):
  29. test_login = self.register_business.base_case("test@163.com","admin","")
  30.  
  31. def test_login_email_error(self):
  32. test_loginemailerror = self.register_business.login_email_error("","admin","")
  33.  
  34. @unittest.skip("就是不执行下面的用例")
  35. def test_must_run(self):
  36. print("必须执行我")
  37.  
  38. if __name__ == "__main__":
  39. unittest.main()

如果想自定义用例的运行顺序可以参考上面链接中的用例操作即可

单次运行多个文件中的大量用例


演示用例1

  1. # -*- coding:utf-8 -*-
  2. '''
  3. filename : unittest_test1.py
  4. '''
  5. import unittest
  6. from selenium import webdriver
  7. from business.register_business import RegisterBusiness
  8.  
  9. class TestLoginPage(unittest.TestCase):
  10.  
  11. @classmethod
  12. def setUpClass(cls):
  13. print("All 只执行一次")
  14.  
  15. @classmethod
  16. def tearDownClass(cls):
  17. print("End 只执行一次")
  18.  
  19. def setUp(self):
  20. print("start 每条用例执行的前置步骤")
  21.  
  22. def tearDown(self):
  23. print("end 每条测试用例的后置步骤")
  24.  
  25. def test_base_case1(self):
  26. print("第一条用例")
  27.  
  28. def test_base_case2(self):
  29. print("第二条用例")
  30.  
  31. @unittest.skip("就是不执行下面的用例")
  32. def test_must_run(self):
  33. print("必须执行我")
  34.  
  35. if __name__ == "__main__":
  36. unittest.main()

演示用例2

  1. # -*- coding:utf-8 -*-
  2. '''
  3. filename:unittest_test2.py
  4. '''
  5.  
  6. import unittest
  7.  
  8. class TestLoginPage(unittest.TestCase):
  9.  
  10. @classmethod
  11. def setUpClass(cls):
  12. print("All 只执行一次")
  13.  
  14. @classmethod
  15. def tearDownClass(cls):
  16. print("End 只执行一次")
  17.  
  18. def setUp(self):
  19. print("start 每条用例执行的前置步骤")
  20.  
  21. def tearDown(self):
  22. print("end 每条测试用例的后置步骤")
  23.  
  24. def test_base_caseA(self):
  25. print("第一条用例")
  26.  
  27. def test_base_caseB(self):
  28. print("第二条用例")
  29.  
  30. def test_must_runC(self):
  31. print("必须执行我")
  32.  
  33. if __name__ == "__main__":
  34. unittest.main()

单次运行上述两个文件中的用例代码

  1. # -*- coding:utf-8 -*-
  2. import unittest
  3. import os
  4.  
  5. class MyTestCase(unittest.TestCase):
  6. def test_allcase(self):
  7. #os.getcwd()获取当前路径
  8. #os.path.join 连接两个或更多的路径名组件
  9. case_path = os.path.join(os.getcwd())
  10. suite = unittest.defaultTestLoader.discover(case_path,'unittest_t*.py')
  11. unittest.TextTestRunner().run(suite)
  12.  
  13. if __name__ == '__main__':
  14. unittest.main()

生成测试报告


  1. # -*- coding:utf-8 -*-
  2. import unittest
  3. import os
  4. import datetime
  5. from HTMLTestRunner_cn import HTMLTestRunner
  6.  
  7. class TestLoginPage(unittest.TestCase):
  8.  
  9. @classmethod
  10. def setUpClass(cls):
  11. print("All 只执行一次")
  12.  
  13. @classmethod
  14. def tearDownClass(cls):
  15. print("End 只执行一次")
  16.  
  17. def setUp(self):
  18. print("start 每条用例执行的前置步骤")
  19.  
  20. def tearDown(self):
  21. print("end 每条测试用例的后置步骤")
  22.  
  23. def test_base_case1(self):
  24. print("第一条用例")
  25.  
  26. def test_base_case2(self):
  27. print("第二条用例")
  28.  
  29. @unittest.skip("就是不执行下面的用例")
  30. def test_must_run(self):
  31. print("必须执行我")
  32.  
  33. if __name__ == "__main__":
  34. report = os.path.join('F:/python_stack/python_autotest/report/report.html')
  35. suite1 = unittest.TestSuite()
  36. suite1.addTests([TestLoginPage("test_base_case1"),TestLoginPage("test_base_case2"),TestLoginPage("test_must_run")])
  37. with open(report,'wb') as f:
  38. runner2 = HTMLTestRunner(stream=f,title='Test Result',description='operator:admin',verbosity=2)
  39. runner2.run(suite1)
  40. print('report is done')
  41. #os.path.dirname(__file__)的作用是 返回脚本的路径,即文件路径中所在的目录
  42. report_path = os.path.dirname(report)
  43. print(report_path)
  44. #os.chdir() 方法用于改变当前工作目录到指定的路径。
  45. os.chdir(report_path)
  46. stamp = datetime.datetime.strftime(datetime.datetime.now(),"%Y-%m-%d-%H-%M-%S")
  47. report_new_name = TestLoginPage.__name__ + 'report'+ stamp +'.html'
  48. os.rename('report.html',report_new_name)

用例执行失败后在指定目录生成错误截图


  1. def tearDown(self):
  2. print("每条测试用例的后置步骤")
  3. #错误截图
  4. for method_name,error in self._outcome.errors:
  5. if error:
  6. case_name = self._testMethodName
  7. #保存文件的路径必须提前创建好,不然保存截图失败
  8. image_path = os.path.join(os.getcwd() + '\\' + "image" + "\\"+ case_name + ".png")
  9. self.driver.save_screenshot(image_path)
  10. 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. javacv开发详解之1:调用本机摄像头视频

    前言:javacv开发包是用于支持java多媒体开发的一套开发包,可以适用于本地多媒体(音视频)调用以及音视频,图片等文件后期操作(图片修改,音视频解码剪辑等等功能),这里只使用最简单的本地摄像头调用 ...

  2. Codeforces Global Round 4

    目录 Contest Info Solutions A. Prime Minister B. WOW Factor C. Tiles D. Prime Graph E. Archaeology F1. ...

  3. 【説明する】hash

    首先对于判重,我们能想到的方法有什么呢? 1)bool数组 2)set(集) 数组与集合的优缺点: 1.因为集合是对数组做的封装,所以,数组永远比任何一个集合要快. 2.数组声明了它容纳的元素的类型, ...

  4. Python中的各种排序问题

    小书匠python排序 本章目录,快速浏览所需内容: 基本的排序 1.列表(list) 1.1按列表元素大小排序 1.2按列表元素的属性 2.字典(dictory) 3.元组(tuple)排序 3.1 ...

  5. manjaro 滚动更新后无法开机,Failed to start load kernel modules,nvidia驱动导致

    今天滚动后无法开机,启动时显示Faild to start load kernel modules,卡在后面无法进入登录界面 systemctl status systemd-modules-load ...

  6. Tkinter 之Grid布局

    一.参数说明 参数 作用 column  指定组件插入的列(0 表示第 1 列)默认值是 0 columnspan  指定用多少列(跨列)显示该组件 row  指定组件插入的行(0 表示第 1 行) ...

  7. ICEM-缺角正方体

    原视频下载地址:https://yunpan.cn/cqKwGiMRiqN7I  访问密码 3377

  8. 20165223《网络对抗技术》Exp 8 Web基础

    目录 -- Web基础 实践说明 实践目标 基础问答 实践内容 Web前端:HTML Web前端:JavaScript Web后端:MySQL Web后端:PHP SQL注入,XSS攻击测试 实验遇到 ...

  9. 2018-2019-2 网络对抗技术 20165231 Exp7 网络欺诈防范

    实践内容(3.5分) 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建立冒名网站 (1分) (2)ettercap DNS spoof ...

  10. STM32 + RT Thread OS 串口通讯

    1.   创建项目 a)   禁用Finsh和console b)   默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因 ...