今天我们讲解在python中如何使用unittest框架实现UI自动化,对于如何使用webdriver的API进行网页的操作今天不再赘述,错过的小伙伴请戳下方链接直达~~
1.unittest单元测试框架
-
为什么要使用单元测试框架?
使用单元测试框架可以规范测试用例的编写,方便用例的管理与维护为测试报告提供数据。
2.unittest单元测试框架中的概念
-
测试用例
一个测试用例是一个独立的测试单元。它检查输入特定的数据时的响应。unittest 提供一个基类:TestCase,用于新建测试用例。
-
测试套件
test suite 是一系列的测试用例,或测试套件,或两者皆有。它用于归档需要一起执行的测试。
-
测试运行器(test runner)
test runner 是一个用于执行和输出测试结果的组件。这个运行器可能使用图形接口、文本接口,或返回一个特定的值表示运行测试的结果。
3.前期准备
下载webdriver,选择对应的浏览器驱动进行下载(本文演示基于谷歌驱动)
-
chromedriver.exe:https://npm.taobao.org/mirrors/chromedriver/
-
Firefox全历史版本下载:http://ftp.mozilla.org/pub/firefox/releases/
-
geckodriver.exe:
https://github.com/mozilla/geckodriver/releases
-
全驱动下载链接:
https://www.selenium.dev/downloads/
驱动下载完成后,将驱动包放在python.exe同级目录下
4.样例
运行结果分析:
#导入Webdriver,UI自动化主要靠Webdriver实现
from selenium import webdriver
#导入时间模块
import time
#导入unittest单元测试模块
import unittest
#定义百度网页登录的测试用例集
class BaiduLogin(unittest.TestCase):
#定义Setup,用于初始化测试固件。本次设置的含义为在执行每个测试用例之前,打开浏览器,设置url为https://www.baidu.com
def setUp(self):
self.url = 'https://www.baidu.com/'
self.browser = webdriver.Chrome()
#定义teardown,用于销毁测试固件。本次设置的含义为在执行每个测试用例之后,关闭浏览器
#所以当前脚本的执行顺序为:
##setup-->test_001_query-->teardown-->setup-->test_002_login-->teardown
def tearDown(self):
self.browser.quit()
def test_001_query(self):
#创建一个名称为test_query_001的测试用例,在浏览器中打开百度首页
self.browser.get(self.url)
#将窗口最大化
self.browser.maximize_window()
#在搜索框中输入关键词“123”
self.browser.find_element_by_id('kw').send_keys('123')
#点击“百度一下”按钮
self.browser.find_element_by_id('su').click()
#print("查询成功")
#等待3S,查看页面返回结果
time.sleep(3)
def test_002_login(self):
#创建一个名称为test_login_002的用例,在浏览器中打开百度首页
self.browser.get(self.url)
#将窗口最大化
self.browser.maximize_window()
#点击“登录”按钮
self.browser.find_element_by_id('s-top-loginbtn').click()
#等待2S
time.sleep(2)
#切换登录方式为“用户名登录”
self.browser.find_element_by_id("TANGRAM__PSP_11__footerULoginBtn").click()
#清除用户名输入框中之前输入过的内容
self.browser.find_element_by_name("userName").clear()
#输入用户名“12345678910”
self.browser.find_element_by_name("userName").send_keys("12345678910")
#输入密码“123456”
self.browser.find_element_by_name("password").send_keys("123456")
#点击登录按钮
self.browser.find_element_by_id("TANGRAM__PSP_11__submit").click()
#手动拖动验证码,如果时间不够,可以增加等待时长
time.sleep(10)
#print("登录完成")
if __name__ == '__main__':
unittest.main()
结果中出现两个“·”,代表两条用例都执行成功; 如果返回的结果中带有“E”,则表示对应的用例中有报错,需要定位脚本中是否存在问题;、 如果返回的结果为“F”,则表示对应的用例执行失败; 如果返回的结果为“S”,表示用例跳过未执行。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
最后基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源【免费】。