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 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 自动化测试框架 -> 正文阅读

[开发测试]自动化测试框架

1.自动化测试框架

1.1unittest和junit的区别

  • 共同点:单元测试框架
  • unittest:UI界面功能的单元测试框架
  • Junit:基于代码的单元测试框架(白盒)

1.2unittest框架解析

1.2.1测试固件:

  • setUp():执行测试用例前的准备工作
  • tearDown():执行测试用例后的清理工作

1.2.2测试套件:

1.2.2.1测试用例的运行顺序

  • 0-9 > A-Z > a-z

  • 忽略测试用例的执行

import time
from selenium import webdriver
import unittest

# 0-9>A-Z>a-z
class Test11(unittest.TestCase):
    def setUp(self):
        print("-----setup-----")
        self.driver = webdriver.Chrome()
        self.url = "https://www.baidu.com/"
        self.driver.maximize_window()

    def tearDown(self):
        print("----down-----")
        self.driver.quit()

    def test_1baidu(self):
        driver = self.driver
        url = self.url
        driver.get(url)
        driver.find_element_by_id("kw").send_keys("hhh")
        driver.find_element_by_id("su").click()
        time.sleep(3)

    def test_Abaidu(self):
        driver = self.driver
        url = self.url
        driver.get(url)
        driver.find_element_by_id("kw").send_keys("111")
        driver.find_element_by_id("su").click()
        time.sleep(3)

    def print(self):
        print("1111111111111111")

    def test_asiduxinwen(self):
        driver = self.driver
        url = self.url
        driver.get(url)
        driver.find_element_by_link_text("新闻").click()
        time.sleep(3)


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

1.2.2.2addtest:每次把一个测试脚本中的一个测试用例加载进测试套件

 # #addTest
    # suite = unittest.TestSuite()
    # suite.addTest(testbaidu1.Baidu1("test_hao"))
    # suite.addTest(testbaidu1.Baidu1("test_hbaidu"))
    # suite.addTest(testbaidu2.Baidu2("test_hao"))
    # suite.addTest(testbaidu2.Baidu2("test_baidusearch"))
    # return suite

1.2.2.3makesuit:把一个测试脚本中的所有测试用例加载进测试套件

 # # makesuite
    # suite = unittest.TestSuite()
    # suite.addTest(unittest.makeSuite(testbaidu1.Baidu1))
    # suite.addTest(unittest.makeSuite(testbaidu2.Baidu2))
    # return suite

1.2.2.4TestLoader:把一个测试脚本中的所有测试用例加载进测试套件

 #TestLoader
    suite1 = unittest.TestLoader().loadTestsFromTestCase(testbaidu1.Baidu1)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(testbaidu2.Baidu2)
    suite = unittest.TestSuite([suite1, suite2])
    return suite

1.2.2.5discover:把一个文件夹,所有以某种形式命名的脚本中的所有测试用例都加载到测试套件中。

 #discover
     discover = unittest.defaultTestLoader.discover("../src0811", pattern="testbaidu*.py", top_level_dir=None)
     return discover

1.2.2.6verbosity

  if __name__ == "__main__":
        unittest.main(verbosity=2)
# 可以增加verbosity参数,例如unittest.main(verbosity=2)
# 在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
# 这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
# 0 ( 静默模式): 只输出失败原因
# 1 ( 默认模式): 成功的输出.,失败的输出F
# 2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息(测试用例的名称,所在脚本名称,类名称,成功ok,失败FAIL)

1.2.2.7 断言

  • 手工测试用例:测试环境,测试步骤,测试数据,预期结果
    def test_Abaidu(self):
        driver = self.driver
        url = self.url
        driver.get(url)
        driver.find_element_by_id("kw").send_keys("杨洋")
        driver.find_element_by_id("su").click()
        # driver.implicitly_wait(20)
        time.sleep(6)
        title=driver.title
        self.assertEqual("杨洋_百度搜索",title,msg="判断错误")
        time.sleep(3)

1.2.2.8HTML报告

  • 总结分析测试用例执行的过程那些成功,那些事败,并分析失败原因,记录结果。
import HTMLTestRunner
import os
import sys
import time
import unittest


def createsuite():
    discovers = unittest.defaultTestLoader.discover("../src0811", 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])
    # 当前路径下resultreport文件夹不存在的时候,就创建一个
    if not os.path.exists(curpath + '/resultreport'):
        os.makedirs(curpath + '/resultreport')

    # 2,解决重复命名的问题
    now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
    print(time.time())
    print(time.localtime(time.time()))
    # 文件名是路径加上文件的名称
    # 准备HTML报告输出的文件
    filename = curpath + '/resultreport/' + now + 'resultreport.html'
    # 打开 HTML 文件, wb 以写的方式
    with open(filename, 'wb') as fp:
        # 括号里的参数是 HTML 报告里面的参数
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告",
                                               description=u"用例执行情况", verbosity=2)
        suite = createsuite()
        runner.run(suite)

1.2.2.9错误截图

# -*- coding: utf-8 -*-
from selenium import webdriver
import unittest
import time
import os


class Baidu1(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.base_url = "http://www.baidu.com/"
        self.verificationErrors=[]
        self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([],self.verificationErrors)

      # 忽略此测试用例
    @unittest.skip("skipping")
    def test_baidusearch(self):
        driver = self.driver
        driver.get(self.base_url)
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys(u"大虞海棠")
        driver.find_element_by_id("su").click()
        time.sleep(6)


    def test_baidu(self):
        driver = self.driver
        driver.get(self.base_url)
        driver.maximize_window()
        driver.find_element_by_id("kw").send_keys("向往的生活")
        driver.find_element_by_id("su").click()
        time.sleep(6)
        print(driver.title)
        try:
            self.assertEqual(driver.title, u"百度一下,你就知道", msg="不相等")
        except:
            self.saveScreenShot(driver, "hao.png")   # 出现异常就调用截图函数进行截图
        time.sleep(5)

    # 截图函数
    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(3)

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

1.2.2.10数据驱动

# -*- coding: utf-8 -*-
from selenium import webdriver
import unittest
import time
from ddt import ddt, unpack, data, file_data
import sys, csv


def getTxt(file_name):
    # ([周迅,周迅_百度搜索],[张国荣,张国荣_百度搜索],[张一山,张一山_百度搜索])
    rows = []
    path = sys.path[0]
    with open(path + '/data/' + file_name, 'rt', encoding="utf-8") as f:
        readers = csv.reader(f, delimiter=',', quotechar='|')
        next(readers, None)
        for row in readers:
            temprows = []
            for i in row:
                # 周迅,周迅_百度搜索
                temprows.append(i)
            rows.append(temprows)
        return rows


@ddt
class Baidu9(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.base_url = "http://www.baidu.com/"
        self.driver.maximize_window()
        self.verificationErrors = []
        self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

    @file_data('test_baidu_data.json')
    # @unittest.skip("skipping")
    # # ([周迅,周迅_百度搜索],[张国荣,张国荣_百度搜索],[张一山,张一三_百度搜索])
    # @data([u"双笙", u"双笙_百度搜索"], ['Lisa', u"Lisa_百度搜索"], [u"张一山", u"张一三_百度搜索"])
    # @unpack
    # @data("王凯", "Lisa", "特朗普", "蒋欣")
    def test_baidu1(self, value):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.maximize_window()
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys(value)
        driver.find_element_by_id("su").click()
        # time.sleep(6)
        # self.assertEqual(driver.title, expected_value, msg="搜索结果和期望不一致!")
        time.sleep(6)



    # ([周迅, 周迅_百度搜索], [张国荣, 张国荣111_百度搜索], [张一山,张一山_百度搜索])
    # @data(['Lisa', u"Lisa_百度搜索"], [u"双笙", u"7887双笙_百度搜索"])
    @unittest.skip("skipping")
    @data(*getTxt('test_baidu_data.txt'))
    @unpack
    def test_baidu2(self, value, expected_value):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys(value)
        driver.find_element_by_id("su").click()
        driver.maximize_window()
        time.sleep(6)
        # 判断搜索网页的title和我们期望的是否一致
        self.assertEqual(expected_value, driver.title, msg="和预期搜索结果不一致!")
        print(expected_value)
        print(driver.title)
        time.sleep(6)


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

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:39:58  更:2021-08-29 09:40:52 
 
开发: 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年5日历 -2024/5/10 19:47:17-

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