当前位置: 首页 > news >正文

selenium(6)-----unittest框架

unittest框架

1)测试固件

1)setUp()是用来初始化测试环境所做的工作

2)tearDown()是用来清理环境所做的工作

2)测试套件

把不同的测试脚本,不同类中的测试用例给组织起来放到一个测试套中执行

3)测试用例的要以test_开头

4)如何使用unittest框架

只需要在脚本中定义一个类,继承于unittest.TestCase即可

verbosity是一个选项,表示测试结果的信息复杂度,有0、1、2 三个值
0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共10个 失败2 成功8
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
2 (详细模式):测试结果会显示每个测试用例的所有相关的信息

创建两个类进行测试:

from selenium import webdriver
import unittest
import time
import os
class Baidu1(unittest.TestCase):
# 测试固件def setUp(self):print("-----setUp----")self.driver=webdriver.Edge("C://Users//18947//AppData//Local//Programs//Python//Python310//msedgedriver.exe")self.url="http://www.baidu.com/"self.driver.maximize_window()time.sleep(3)def tearDown(self):print("------tearDown----")self.driver.quit()#     测试用例 忽略测试用例的执行#     @unittest.skip("skipping")def test_hao(self):driver=self.driverurl=self.urldriver.get(url)driver.find_element_by_link_text("hao123").click()time.sleep(3);def test_hbaidu(self):driver=self.driverurl=self.urldriver.get(url)driver.find_element_by_id("kw").send_keys("突如其来的假期")time.sleep(3)driver.find_element_by_id("su").submit()print(driver.title)self.savescreenAsPhoto(driver,".jpg")time.sleep(5)def savescreenAsPhoto(self,driver,file_name):if not os.path.exists("./image"):os.makedirs("./image")now=time.strftime("%Y%m%d-%H%M%S",time.localtime(time.time()))driver.get_screenshot_as_file("./image/"+now+"-"+file_name)time.sleep(3)if __name__ == "__main":unittest.main()
# coding = utf8
from selenium import webdriver
import unittest
import time
# 导入By模块
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoAlertPresentException
from selenium.common.exceptions import NoSuchElementException
class TestBaiduTwo(unittest.TestCase):def setUp(self):#获得浏览器的驱动self.driver=webdriver.Chrome()#让浏览器窗口最大化self.driver.implicitly_wait(3)self.base_url="http://www.baidu.com/"self.driver.maximize_window()self.array=[]self.flag = Truedef tearDown(self):self.driver.quit()self.assertEqual([],self.array)def test_hao(self):driver=self.driverdriver.get(self.base_url)driver.find_element_by_link_text("新闻").click()time.sleep(3)def test_baidusearch(self):driver=self.driverdriver.get(self.base_url)driver.find_element_by_id("kw").clear()driver.find_element_by_id("kw").send_keys("庆余年")driver.find_element_by_id("su").click()#选择通过什么方式来进行获取元素,value是什么属性self.is_element_present(By.ID, "su").click()time.sleep(3)def is_element_present(self,how,what):try:element=self.driver.find_element(by=how,value=what)except NoSuchElementException as e:return elementreturn elementdef is_alert_present(self):try:self.driver.switch_to.alert()except NoAlertPresentException as e:return Falsereturn Truedef close_alert_and_get_its_text(self):try:#获取到alert弹出框alert=self.driver.switch_to_alert()#获取到alert弹出框中的文字alert_text=alert.textif self.flag:alert.accept()else:alert.dismiss()return alert_textfinally:self.flag = Trueif __name__ == "__main__":unittest.main(verbosity=2)

1)以test_开头命名的方法,是测试方法,在运行整个类的时候会默认执行。
2)unittest提供了全局的main()方法,使用它可以方便地将一个单元测试模块变成可以直接运行的测试脚本main()方法搜索所有包含在该模块中以”test"命名的测试方法,并自动执行他们

unittest里面有四个很重要的概念,test fixture,test case,test suite,test runner
Test Fixture
1)对一个测试用例环境的搭建和销毁,就是一个fixture,通过覆盖setUp()和tearDown()方法来实现,setUp()方法可以进行测试环境的搭建,比如获取待测试浏览器的驱动,或者如果测试中需要访问数据库,那么可以在setUp()中通过建立数据库连接来进行初始化
2)tearDown()方法进行环境的销毁,可以进行关闭浏览器,关闭数据库连接,清除数据库中产生的数据等操作;

Test Case
一个TestCase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括测试前准备环境的搭建(setUp)实现测试过程的代码,以及测试后环境的还原(tearDown)单元测试(unit test)的本质就在这里一个测试用例,就是一个完整的测试单元,可以对某一个功能进行验证

TestSuite

一个功能的验证往往需要多个测试用例,可以把多个测试用例集合在一起执行,这个就产生了测试套件TestSuite的概念,Test Suit用来将多个测试用例组装在一起;

test Runner

test Runner测试的执行也是非常重要的一个概念,在unittest框架中,通过TextTestRunner类提供的run()方法来执行test suite/test case

 

addTest()

1)TestSuite类的addTest()方法可以把不同的测试类中的测试方法组装到测试套件中,但是addTest()一次
2)只能把一个类里面的一个测试方法组装到测试套件中 

但是上述做法有两个不方便的地方,阻碍脚本的快速执行,必须每次修改testsuite.py:
1)需要导入所有的相关的py文件,比如 import testbaidu1,每新增一个脚本就需要导入一个
2)addTest一次只能增加一个测试方法,如果一个py文件中有10个测试方式,如果都要组装到测试套件中,就需要增加10次

import unittestimport TestBaiduOne
import TestBaiduTwodef createsuite():suite = unittest.TestSuite()suite.addTest(TestBaiduOne.Baidu1("test_hao"))suite.addTest(TestBaiduTwo.Baidu2("test_baidusearch"))suite.addTest(TestBaiduTwo.Baidu2("test_hao"))return suite
if __name__=="__main__":suite= createsuite()runner=unittest.TextTestRunner(verbosity=2)runner.run(suite)

跑测试套件用例步骤:

1)先进行生成测试套件

2)得到跑测试套件的runner

3)用runner去跑测试套件

 

把一个类中的所有测试用例都添加到一个测试套件里面

1)使用unittest.makeSuite()

def createsuite():suit=unittest.TestSuitesuit.addTest(unittest.makeSuite(TestBaiduOne.Baidu1))suit.addTest(unittest.makeSuite(TestBaiduTwo.Baidu2))return suite
if __name__=="__main__":suite= createsuite()runner=unittest.TextTestRunner(verbosity=2)runner.run(suite)

 

http://www.lryc.cn/news/40279.html

相关文章:

  • 统计软件与数据分析--Lesson3
  • 竞赛无人机搭积木式编程——以2022年TI电赛送货无人机一等奖复现为例学习(7月B题)
  • oracle基础操作
  • python爬虫数据写入excel
  • 优思学院|六西格玛DMAIC,傻傻搞不清?
  • 【Linux】网络编程套接字(下)
  • 【Linux网络】网络编程套接字(上)
  • 十二、51单片机之DS1302
  • ChatGPT-4震撼发布
  • HTML樱花飘落
  • 力扣-排名靠前的旅行者
  • 马上要面试了,还有八股文没理解?让ChatGPT来给你讲讲吧——如何更好使用ChatGPT?
  • 怎么避免服务内存溢出?
  • 01_I.MX6U芯片简介
  • 嵌入式学习笔记——STM32的中断控制体系
  • 如何发布自己的npm包
  • Qt QProcess管道命令带“|”多命令执行获取stdout输出问题总结
  • 【JavaEE进阶篇2】spring基于注解开发1
  • 统一登录验证统一返回格式统一异常处理的实现
  • 【建议收藏】华为OD面试,什么场景下会使用到kafka,消息消费中需要注意哪些问题,kafka的幂等性,联合索引等问题
  • 【MySQL】MySQL的优化(二)
  • QT VTK开发 (一、下载编译)
  • C/C++每日一练(20230314)
  • 裸辞3个月,面试了25家公司,终于找到心仪的工作了
  • 【Linux学习】进程间通信——system V(共享内存 | 消息队列 | 信号量)
  • 解决 IDA 防F5转伪C笔记
  • 【面试题】你需要知道的webpack高频面试题
  • 【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.60】损失函数改进为wiou
  • 2023年中职网络安全竞赛——数字取证调查(新版)attack解析(详细)
  • Cadence Allegro 导出Net Single Pin and No Pin报告详解