35、Selenium + Python 实现 UI 自动化测试-正片7
来源:互联网 发布:高德交通大数据 编辑:程序博客网 时间:2024/06/04 20:18
首先,我们回顾一下前面的知识。
1、我们创建不同的目录用来分类储存文件,包括:
(1)cases目录,用来存储用例;
(2)common目录,用来存储公共函数供用例调用;
(3)config目录,用来存储配置文件,将一些易变的配置项从代码分离;
(4)report目录,用来存储报告文件
(5)utils 目录,用来存储工具类,比如一些读配置文件的函数或方法;
2、实现的功能,包括:
(1)自动执行测试;
(2)生成HTML报告;
(3)将报告通过邮件发给相关人;
本节我们来丰富一下测试用例:以登录为例,之前我们只测试了正确的用户名、密码能登录成功。现在我们细化一下测试用例:
(1)正确的用户名、密码;
(2)错误的用户名、密码;
(3)空用户名、密码;
接下来修改一下test_000_login.py文件,内容如下:
import unittestfrom selenium import webdriverimport timefrom time import sleepfrom first.utils import readyamlclass TestLogin(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(20) self.driver.maximize_window() url = readyaml.read_yaml('url') self.driver.get(url) def test_login1(self): self.driver.find_element_by_id('username').clear() self.driver.find_element_by_id('username').send_keys('admin') self.driver.find_element_by_id('password').clear() self.driver.find_element_by_id('password').send_keys('test1234') self.driver.find_element_by_id('login-submit').click() # 如何判断是否登录成功呢?登录成功后右上角有用户名 ele = self.driver.find_element_by_xpath('//*[@id="loggedas"]/a').text self.assertEqual(ele,"admin") def test_login2(self): self.driver.find_element_by_id('username').clear() self.driver.find_element_by_id('username').send_keys('admin') self.driver.find_element_by_id('password').clear() self.driver.find_element_by_id('password').send_keys('test12345') self.driver.find_element_by_id('login-submit').click() ele = self.driver.find_element_by_id('flash_error').text self.assertEqual(ele,"无效的用户名或密码") def test_login3(self): self.driver.find_element_by_id('username').clear() self.driver.find_element_by_id('username').send_keys('') self.driver.find_element_by_id('password').clear() self.driver.find_element_by_id('password').send_keys('') self.driver.find_element_by_id('login-submit').click() ele = self.driver.find_element_by_id('flash_error').text self.assertEqual(ele, "无效的用户名或密码") def tearDown(self): self.driver.quit()if __name__ == '__main__': TestLogin()
上面3条测试用例执行步骤都是一样的,只不过输入值不一样,然后判断不同的结果。代码重复度高,并且,如果我们要再增加测试用例的话(不同输入,输出),还需要修改测试代码。
改进:我们在目录下新建文件夹data用来存储用例文件,新建Excel 来维护测试用例,后面增加或修改测试用例,只需要修改Excel表即可。如果需要的话,每条case对应一个Excel表,Excel表名称和用例名称相同。比如这里我们新建Excel 名称为:test_000_login.xlsx
我们故意将用例1和3的预期结果修改错,制造两条失败的用例
调整test_000_login.py 代码如下:
我们从Excel 读入数据,执行登录动作。
import unittest,osfrom selenium import webdriverimport timefrom time import sleepfrom first.utils import readyaml,readexcelimport xlrdfrom xlutils.copy import copyclass TestLogin(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(20) self.driver.maximize_window() url = readyaml.read_yaml('url') self.driver.get(url) def test_login1(self): base_path = os.path.dirname(os.path.abspath(__file__)) data_path = base_path + '\..\data\\test_000_login.xlsx' wb = xlrd.open_workbook(data_path) # 打开用例文件 sheet = wb.sheet_by_index(0) # 打开第一个标签 row = 0 for row in range(sheet.nrows): if row == 0: pass else: name = sheet.cell(row, 2).value password = sheet.cell(row, 3).value way = sheet.cell(row, 4).value value1 = sheet.cell(row, 5).value expect_res = sheet.cell(row, 6).value self.driver.find_element_by_id('username').clear() self.driver.find_element_by_id('username').send_keys(name) self.driver.find_element_by_id('password').clear() self.driver.find_element_by_id('password').send_keys(password) self.driver.find_element_by_id('login-submit').click() sleep(2) # 如何判断是否登录成功呢?登录成功后右上角有用户名 try: ele = self.driver.find_element(way,value1).text if ele == expect_res: print('pass') else: print('fail') except: print('fail') def tearDown(self): self.driver.quit()if __name__ == '__main__': TestLogin()运行结果:
C:\Python36\python.exe "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2016.1.2\helpers\pycharm\utrunner.py" E:\python\test1\first\cases\test_000_login.py::TestLogin::test_login1 true
Testing started at 9:57 ...
fail
pass
fail
Process finished with exit code 0
小结:
1、引入Excel 保存用例,将数据和代码分离
2、但是目前这样写有很大的问题:问题1,没有讲测试结果回写到Excel表;问题2,和之前用的unittest 框架 assert不统一,这样会导致统计不到错误结果
- 35、Selenium + Python 实现 UI 自动化测试-正片7
- 29、Selenium + Python 实现 UI 自动化测试-正片1
- 30、Selenium + Python 实现 UI 自动化测试-正片2
- 31、Selenium + Python 实现 UI 自动化测试-正片3
- 32、Selenium + Python 实现 UI 自动化测试-正片4
- 33、Selenium + Python 实现 UI 自动化测试-正片5
- 34、Selenium + Python 实现 UI 自动化测试-正片6
- 7、Selenium + Python 实现 UI 自动化测试-键盘操作
- 1、Selenium + Python 实现 UI 自动化测试-环境搭建
- 3、Selenium + Python 实现 UI 自动化测试-元素定位
- 4、Selenium + Python 实现 UI 自动化测试-定位元素吗?
- 6、Selenium + Python 实现 UI 自动化测试-鼠标操作
- 8、Selenium + Python 实现 UI 自动化测试-操作浏览器标签
- 9、Selenium + Python 实现 UI 自动化测试-操作浏览器窗口
- 10、Selenium + Python 实现 UI 自动化测试-操作输入框
- 12、Selenium + Python 实现 UI 自动化测试-操作下拉列表
- 13、Selenium + Python 实现 UI 自动化测试-操作表格
- 15、Selenium + Python 实现 UI 自动化测试-操作JavaScript弹窗
- SpringMVC+Spring+Hibernate框架搭建
- js 正则相关问题
- Python学习起步
- Spring Boot中使用Swagger2构建强大的RESTful API文档
- 获取一个年份、月份、一段时间的年月份sql,例如从某年到今年的时间段2017-01、2017-02
- 35、Selenium + Python 实现 UI 自动化测试-正片7
- spring-boot 项目启动时执行的方法实现
- Spring的基本用法:
- 缓存技术的详解
- ROS摄像机的标定
- Android开发:XML简介及DOM、SAX、PULL解析对比
- 【Extjs6.0译文系列】架构之 --- 使用路由
- 面试题37:两个链表的第一个公共节点
- list.add()存储对象的值的时候应注意