一、查看当前运行的浏览等相关信息
1 driver=webdriver.Chrome()2 print(driver.capabilities["version"]) #浏览器版本
3 print(driver.capabilities["platform"]) #浏览器运行平台
4 print(driver.capabilities["browserName"]) #浏览器名称
1 75.0.3770.100
2 Windows NT3 chrome
二、自动化测试框架搭建篇:数据驱动测试
1.数据驱动概述
相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动。
实施数据驱动测试步骤如下:
(1)编写测试脚本,脚本需要支持从程序对象、文件或数据库读入测试数据
(2)将测试脚本使用的测试数据存入程序对象、文件或数据库等外部介质中
(3)运行脚本过程中,循环调用存储在外部介质中的测试数据
(4)验证所有的测试结果是否符合预期结果
1 #@Author:lsj
2 #@version V1.0
3 #-*- coding:UTF-8 -*-
4
5 importunittest6 from selenium importwebdriver7 from time importsleep8 from selenium.webdriver.support.ui importWebDriverWait9 from selenium.webdriver.support importexpected_conditions as EC10 from selenium.webdriver.common.by importBy11
12 #打开浏览器
13 defopenBroswer():14 driver =webdriver.Chrome()15 returndriver16 #获取URL地址
17 defopenUrl(driver, url):18 driver.get(url)19 driver.maximize_window()20
21 #元素是否存在
22 defele_is_presence(driver, tuple_arg):23 return WebDriverWait(driver, 10).until(EC.presence_of_element_located(tuple_arg))24
25 #点击操作
26 defele_click(driver, tuple_arg):27 ele_is_presence(driver, tuple_arg).click()28
29 #发送文本
30 defele_sendKeys(driver, tuple_arg, keyword):31 ele_is_presence(driver, tuple_arg).send_keys(keyword)32
33 #检查登录结果
34 defcheckResult(driver, loginfo):35 try:36 ele_is_presence(driver, loginfo)37 print("登录状态验证通过!")38 except:39 print("登录失败!")40 #退出
41 defquitbrowser(driver):42 sleep(2)43 driver.quit()44
45 classTest_Login():46 url = 'http://daxue.qysxy.com.cn/admin/static/front/html/login.html'
47 account = ['fuguang',"admin","fuguangl"]48 pwd = ['123456','123456','123456']49 c = ['1111', '2222','1111']50 username = (By.NAME, "username") #用户名输入框
51 password = (By.NAME, "password") #密码输入框
52 code = (By.ID, "code") #验证码输入框
53 loginbtn = (By.ID, 'loginBtn') #登录按钮
54
55
56 #实例化driver
57 driver =openBroswer()58 #打开url
59 openUrl(driver, url)60 #首页点击登录按钮
61 ele_click(driver, loginbtn)62
63 length =len(account)64 #输入用户名
65 for i inrange(0, length):66 #for j in range(0, length):
67 ele_sendKeys(driver, username, account[i])68 #输入密码
69 ele_sendKeys(driver, password, pwd[i])70 #输入验证码
71 ele_sendKeys(driver,code,c[i])72 #点击登录按钮
73 ele_click(driver, loginbtn)74 sleep(3)75 driver.refresh()76 quitbrowser(driver)77
78 if __name__ == '__main__':79 Test_Login()
简单的数据驱动设计模式
对上面的数据整理到一个文件中,如下所示,导入到Excel中
2.数据驱动单元测试的环境准备
2.1、openpyxl模块的安装:pip install openpyxl,验证方式如下:from openpyxl import load_workbook
没有报错证明安装成功。
2.2、注意openpyxl只能操作xlsx文件而不能操作xls文件
2.3、在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells
(1)Workbook就是一个excel工作表,如下操作
#打开一个xlsx文件
wb=load_workbook('test.xlsx')
(2)Sheet是工作表中的一张表页,如下有三种方式
#获取一张表(一)
# sheet1=wb.get_sheet_by_name('Sheet1')
#获取一张表(二)
# sheet1=wb['Sheet1']
#获取一张表(三)
sheet1=wb.worksheets[0]
(3)Cell就是简单的一个格
# @Author:lsj
# @version V1.0
# -*- coding:UTF-8 -*-
from openpyxl import load_workbook
#打开一个xlsx文件
wb=load_workbook('test_budaoguan.xlsx')
#获取一张表(一)
# sheet1=wb.get_sheet_by_name('Sheet1')
#获取一张表(二)
# sheet1=wb['Sheet1']
#获取一张表(三)
sheet1=wb.worksheets[0]
# 打印sheet1
print(sheet1)
#表格中输入内容,注意:当文件打开时,数据写不进去。
sheet1['A1']='TEST'
#保存(修改之后需要保存,否则修改无效)
wb.save('test_budaoguan.xlsx')
运行结果如下
#打印表名
print("表名:",sheet1.title)
#读取一整行(传入行号)
print("读取一整行:",sheet1[1])
#读取某一列
print("读取某一列:",sheet1['A'])
#读取某一格的值
print("读取某一格:",sheet1['A1'])
print("读取某一格的值:",sheet1['A1'].value)
#获取最大行数
print("获取最大行数:",sheet1.max_row)
#获取最大列数
print("获取最大列数:",sheet1.max_column)
运行结果:
表名: Sheet2
读取一整行: (,)
读取某一列: (,)
读取某一格:
读取某一格的值: TEST
获取最大行数: 1
获取最大列数: 1
# 获取所有行
# print(sheet1.rows)
# 获取所有的列
# print(sheet1.columns)
3.使用Excel进行数据驱动测试
测试逻辑:
1.打开百度首页,从Excel文件中读取数据作为搜索关键词
2.在搜索输入框中输入读取出的搜索关键词
3.单击搜索按钮
4.断言搜索结果页面中是否出现Excel文件中提供的预期内容,包含则认为测试执行成功,否则认为失败
如下图所示:
# 获取所有行
print(sheet1.rows)
# 获取所有的列
print(sheet1.columns)
# 遍历行
for row in sheet1.rows:
# 遍历行中是格
for cell in row:
print(cell.value,end='\t')
print()
print(20*'=')
# 遍历列
for column in sheet1.columns:
#遍历列中的格
for cell in column:
print(cell.value, end='\t')
print()
运行结果
序号搜索词期望结果
1郎平排球
2李宁体操
3王楠乒乓球
====================
序号 1 2 3
搜索词郎平李宁王楠
期望结果排球体操乒乓球
以上的方法封装到一个类中
1 #@Author:lsj
2 #@version V1.0
3 #-*- coding:UTF-8 -*-
4
5 from openpyxl importload_workbook6
7 #建立一个ExcelMethod类
8 classExcelMethod():9 defreadExcel(self,filename):10 self.filename =filename11 #创建一个大列表
12 excel_list =[]13
14 ## 创建一个小列表
15 #son_list = []
16
17 #获取workbook对象
18 self.wb =load_workbook(self.filename)19 #获取第二个sheet表
20 self.sheet = self.wb.worksheets[3]21 #获取行
22 for row inself.sheet.rows:23 #为了避免son_list.append无限追加值,每次换行清空一次值
24 son_list =[]25 #获得每一行的一列
26 for cell inrow:27 #取出值
28 #print(cell.value)
29 #把第一行里的内容按列表加入到son_list[]中
30 son_list.append(cell.value)31
32 #把小列表加入到大列表里中
33 excel_list.append(son_list)34 #打印出列表
35 print(excel_list)36 #列表切片操作从取出1以后的列表
37 return excel_list[1:]38
39 if __name__== "__main__":40 #ExcelMethod().readExcel("test_budaoguan.xlsx")
41 print(ExcelMethod().readExcel("test_budaoguan.xlsx"))
建立一个ExcelMethod类,读取excel文件
#@Author:lsj#@version V1.0#-*- coding:UTF-8 -*-
importunittestfrom selenium importwebdriverfrom qianyan.test_budaoguan.excel_method importExcelMethodfrom time importsleepclassExcel_Test(unittest.TestCase):
@classmethoddefsetUpClass(cls):#调用浏览器
cls.driver =webdriver.Chrome()#输入url地址
cls.driver.get("http://daxue.qysxy.com.cn/admin/static/front/html/login.html")#页面最大化
cls.driver.maximize_window()#读取文件
cls.excelmethod =ExcelMethod()
cls.user_list= cls.excelmethod.readExcel("test_budaoguan.xlsx")#测试方法
deftest_search(self):for i inrange(0,len(self.user_list)):#获取元素位置,用户名输入框
username = self.driver.find_element_by_id("username")#获取元素位置,密码输入框
password = self.driver.find_element_by_id("password")#获取元素位置,验证码输入框
code = self.driver.find_element_by_id("code")#清空用户名输入框
username.clear()
password.clear()#清空用户名输入框
code.clear() #清空验证码输入框
#填写用户名输入框,填写第一个列表中的第二个数据,为了让数据按顺序自动往下执行,加入for循环状态
username.send_keys(self.user_list[i][1])
password.send_keys(self.user_list[i][2])
code.send_keys(self.user_list[i][3])
sleep(1)
self.driver.find_element_by_id("loginBtn").click()## 出现弹框
#btn = self.driver.switch_to_alert()
#sleep(3)
## 获取按钮上的文本
#print(btn.text)
sleep(3)
self.assertTrue(self.user_list[i][4] inself.driver.page_source)#打印页面源码
print(self.driver.page_source)
@classmethoddeftearDownClass(cls):
cls.driver.quit()if __name__ == "__main__":
unittest.main()
建一个测试方法调取ExcelMethod类