unittest框架解析

举报
bug郭 发表于 2022/11/30 16:59:00 2022/11/30
【摘要】 大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流作者简介:CSDN java领域新星创作者blog.csdn.net/bug…掘金LV3用户 juejin.cn/user/bug…阿里云社区专家博主,星级博主,...

大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

本章目标

本章主要是学习单元测试框架untittest,这里的单元测试指的是对最小的软件设计单元(模块)进行的测试验证,在UI自动测试里,这些单元测试主要针对的是UI界面的功能进行的自动化测试.这里的unittest并不是java里的unit单元测试框架!

  • unittest框架解析
  • 批量处理脚本
  • unittest断言
  • HTML报告生成
  • 异常捕捉和错误截图
  • 数据驱动

unittest框架解析

unittest是python的单元测试框架,主要作用如下:

  • 提供用例的组织和执行

当我们的测试用例比较庞大时就需要考虑用例的组织和执行顺序,unittest就可以帮助我们!

  • 提供丰富的比较方法

我们用例执行结束后要通过比较用例执行的实际结果和预期结果(断言),从而确定用例是否顺利通过!
例如判断相等/不相等,包含/不包含,True/False

  • 提供丰富的日志

当测试用例执行失败时可以清晰的抛出和保存用例执行失败的原因!日志提供了丰富的执行结果:用例总执行时间,失败用例数,成功用例数

unittest里的四个重要概念:

  • Test Fixture

对一个测试环境的搭建和销毁就是一个fixture,主要通过setUp()tearDown()覆盖方法实现!

  • setUP():对测试环境的搭建,比如获取浏览器驱动,数据库建立连接初始化等等
  • tearDown(): 对测试环境的销毁,比如关闭浏览器,关闭数据库的连接,清楚数据库中的数据等
  • Test Case

Test Case的实例就是一个测试用例.测试用例就是完整的一个测试流程,包括测试环境的搭建(setUp),实现测试过程的代码,环境的还原(tearDown).一个测试用例就是一个测试单元,可以对某个测试功能进行验证!

  • Test Suite

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

  • Test Runner

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

unittest框架测试脚本示例:

# 导入unittest框架
import unittest
from selenium import webdriver
import time
# 继承TestCase这个类就会使用unittest框架来组织测试用例!
class Baidu1(unittest.TestCase):
    def setUp(self) -> None: # 覆盖setUP方法,测试环境搭建!
        print('---setUp---')
        self.driver = webdriver.Chrome() # 获取到浏览器驱动
        self.url = "http://www.baidu.com/" #测试的web链接
        self.driver.maximize_window() # 浏览器最大化!
        time.sleep(3)
    def tearDown(self) -> None: # 覆盖tearDown方法,测试环境销毁!
        print('---tearmDown---')
        self.driver.quit() # 关闭浏览器,释放驱动!
    # 测试用例
    def test_baidu1(self):
        self.driver.get(self.url) # 打开百度链接
        self.driver.find_element_by_id('kw').send_keys('java') # 定位到搜索框,输入文本
        time.sleep(2)
        self.driver.find_element_by_id('su').click() # 定位到搜索按钮点击!
        time.sleep(3)
    def test_baidu2(self):
        self.driver.get(self.url) # 重新打开百度链接!
        self.driver.find_element_by_link_text('新闻').click() # 打开新闻导航地址
        time.sleep(2)
        for window in self.driver.window_handles:
            self.driver.switch_to_window(window)
            if window.title =='百度新闻——海量中文资讯平台':
                break
        self.driver.find_element_by_name('word').send_keys('赣州')
        time.sleep(2)
        self.driver.find_element_by_xpath('//*[@id="s_btn_wr"]').click()
        time.sleep(2)
        #滑动到低端!
        js = 'var j = document.documentElement.scrollTop=10000'
        self.driver.execute_script(js)
        time.sleep(3)
        #滑动到顶端
        js = 'var j = document.documentElement.scrollTop=0'
        self.driver.execute_script(js)
        time.sleep(3)
    def baidu3(self):
        self.driver.get('http://baidu.com/')
        self.driver.find_element_by_partial_link_text('hao').click()
        time.sleep(2)

    if __name__=='__main__':
        unittest.main() # unittest框架提供了全局的main方法






在这里插入图片描述

这里unittest提供了全局的main方法,main方法中会将test_开头的方法进行组织,然后调用main方法就可以执行所有的以test_开头的方法!

新窗口,无法定位元素

注意事项

当我们在当前页面的基础上开了一个新的窗口页面,我们如果要对新的窗口元素进行定位,我们需要将窗口更新,才能定位到新的窗口元素

# 进行窗口定位之前要time.sleep() 保证窗口已经跳转过来!
for handle in self.driver.window_handles:
	self.driver.switch_to_window(handle) # 转换到新的窗口!
	if hanle.title =='新窗口title':
		break # 定位到窗口就退出循环!
#进行新窗口元素的定位!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。