IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> unittest框架以及常用断言 -> 正文阅读

[开发测试]unittest框架以及常用断言

unittest框架

unittest框架是黑盒测试,主要做UI界面层的功能测试的框架,而java Junit单元测试框架,是白盒测试

利用单元测试框架,创建一个类,该类继承unittest 的TestCase,这样可以把每个case看成是一个最小的单元,由测试容器组织起来,到时候直接执行,同时引入测试报告。

测试固件:

测试固件是的两个方法?
SetUp():SetUp方法进行测试前初始化
TearDown():UI功能测试后的清理工作

测试用例TestCase:

必须以 test_开头
在unitteat框架可以写多个测试用例,只要是test_开头

测试用例的执行顺序

测试用例的默认顺序:0 ~ 9,A ~ Z,a ~ z
忽略测试用例的执行:@unittest.skip(“skipping”),在要忽略执行的测试用例前面加上这句

测试套件TestSuite:

测试套件:把不同脚本中的测试用例组织起来,一起执行。
在unittest中是用TestSuite 类来表示的。

完整的单元测试很少只执行一个测试用例,开发人员通常都需要编写多个测试用例才能对某一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集,

addTest:把测试脚本一个一个添加进来
**makeSuite和TestLoader **:都是 把整个测试脚本中的所有测试方法都添加到测试套件中
discover:把一个文件夹下,以某种格式命名的所有脚本里面的全部测试方法都添加到测试套件中

unittest断言

断言判断实际结果和预期结果是否一致。用来检验测试是否满足预期结果。

常用的断言:

序号断言方法断言描述
1assertEqual(arg1, arg2, msg=None)验证arg1=arg2,不等则fail
2assertNotEqual(arg1, arg2, msg=None)验证arg1 != arg2, 相等则fail
3assertTrue(expr, msg=None)验证expr是true,如果为false,则fail
4assertFalse(expr,msg=None)验证expr是false,如果为true,则fail
5assertIs(arg1, arg2, msg=None)验证arg1、arg2是同一个对象,不是则fail
6assertIsNot(arg1, arg2, msg=None)验证arg1、arg2不是同一个对象,是则fail
7assertIsNone(expr, msg=None)验证expr是None,不是则fail
8assertIsNotNone(expr, msg=None)验证expr不是None,是则fail
9assertIn(arg1, arg2, msg=None)验证arg1是arg2的子串,不是则fail
10assertNotIn(arg1, arg2, msg=None)验证arg1不是arg2的子串,是则fail
11assertIsInstance(obj, cls, msg=None)验证obj是cls的实例,不是则fail
12assertNotIsInstance(obj, cls, msg=None)验证obj不是cls的实例,是则fail

selenium添加断言,鼠标右键点击selenium IDE,assert

HTMLReport:测试报告

生成测试报告的步骤:
1.解决测试报告存放的位置
2.解决测试报告命名问题:时间命名
3.生成测试报告

比如测试baidu1.py,下面给出baidu1.py的代码:

from selenium import webdriver
import unittest
import time
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException

#关键字 类名(使用unittest框架)
#继承,Baidu1这个类继承自unittest.TestCase类,就可以使用unittest框架
class Baidu1(unittest.TestCase):
    #setUP(self)初始化方法
    #self代表类的实例,在方法的一个参数
    #定义全局变量  self.变量名
#测试固件
    def setUp(self):
        #self.driver不写self的话,driver是局部变量,写了之后是全局变量
        self.driver = webdriver.Chrome()
        self.url = "https://www.baidu.com/"
        self.driver.maximize_window()
        time.sleep(3)

    #清理
    def tearDown(self):
        self.driver.quit()

#测试用例
    def test_hao(self):
        driver = self.driver
        driver.get(self.url)
        driver.find_element_by_link_text("hao123").click()
        time.sleep(6)

    def test_baidusearch(self):
        driver = self.driver
        driver.get(self.url)

        driver.find_element_by_id("kw").send_keys("易烊千玺")
        driver.find_element_by_id("su").click()
        time.sleep(3)
        
    if __name__ == "__main__":
        unittest.main(verbosity=1)
#运行后发现,先运行百度搜索易烊千玺,然后运行hao123




下面是生成测试报告的代码:HTMLRunner.py

import unittest
import os, sys
import time
import HTMLTestRunner


     # 手工添加案例到套件,
def createsuite():
        discovers = unittest.defaultTestLoader.discover('../src20210702', pattern='testbaidu*.py', top_level_dir=None)
        print(discovers)
        return discovers


if __name__ == "__main__":
        # 1.创建一个文件夹(测试报告需单独存放)
        curpath = sys.path[0]  # 获取路径   sys.path:是一个路径集
        print(sys.path)
        print(sys.path[0])
        # 2.解决重复命名问题
        # 当前路径下rsultreport文件夹不存在时,就创建一个
        if not os.path.exists(curpath + '/resultreport'):
            os.makedirs(curpath + '/resultreport')

        # 取当前时间
        now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
        print(time.time())
        print(time.localtime(time.time()))

        # 命名:路径+文件名称
        filename = curpath + '/resultreport/' + now + 'resultreport.html'
        # 打开HTML文件,wb 以写的方式
        with open(filename, 'wb') as fp:
            runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'用例执行情况', verbosity=2)

            suite = createsuite()
            runner.run(suite)

运行程序,会有HTML报告生成,然后右击报告,Open in Browser,用浏览器打开

异常捕捉 和 错误截图

用例不可能每一次运行都成功,肯定运行时候有不成功的时候。如果可以捕捉到错误,并且把错误截图保存,这将
是一个非常棒的功能,也会给我们错误定位带来方便。 例如编写一个函数,关键语句为driver.get_screenshot_as_file:

def savescreenshot(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(1)

比如testscreenshot.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
import os

class Baidu1(unittest.TestCase):
    #test fixture,初始化环境
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://www.baidu.com/"

        self.verificationErrors = []
        self.accept_next_alert = True

    #测试用例,必须以test开头
    def test_hao(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_link_text("hao123").click()
        time.sleep(2)
        try:
            self.assertEqual(u'hao_上网从这里开始', driver.title)
        except:
            self.savescreenshot(driver,'hao.png')

        #判断element是否存在,可删除
    def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException as e: return False
        return True

    #判断alert是否存在,可删除
    def is_alert_present(self):
        try: self.driver.switch_to.alert()
        except NoAlertPresentException as e: return False
        return True

    #关闭alert,可删除
    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to.alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally: self.accept_next_alert = True

    #test fixture,清除环境
    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

    def savescreenshot(self,driver,file_name):  #参数:驱动,截图名称
     	#1.错误截图的存储位置;
        if not os.path.exists('./image'):
            os.makedirs('./image')
         #2.解决重复命名问题;
        now=time.strftime("%Y%m%d-%H%M%S",time.localtime(time.time()))
        print(time.time())
        print(time.localtime(time.time()))
        print(now)
    	#3.截图保存
        driver.get_screenshot_as_file('./image/'+now+'-'+file_name)
        time.sleep(3)

    if __name__ == "__main__":
        unittest.main()

ddt数据驱动

需要测试多组数据
目录下建data文件夹,建文件(用execl(最好用TXT文件)另存为csv

增加ddt数据
#@data(‘selenium’,u’测试中文’,‘9999999999’)
#@data(2,3,4)

#单变更时不使用@unpack
#@data([3, 2], [4, 3], [5, 3])
@data(*getCsv(‘test_baidu_data.csv’))
#使用file_data需要在cmd窗口下运行,否则找不到文件
#@file_data(‘test_data_list.json’)
@unpack

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:38:55  更:2021-08-28 09:39:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:28:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码