python自动化数据驱动_Selenium3+python自动化013-自动化数据驱动及模型介绍

一、查看当前运行的浏览等相关信息

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类

你可能感兴趣的:(python自动化数据驱动)