Selenium_Python_Note-Data Driven Testing(数据驱动测试)

1.What is Data Driven Testing?
Definition from WiKi:
‘Data-driven testing (DDT) is a term used in the testing of computer software to describe testing done using a table of conditions directly as test inputs and verifiable outputs as well as the process where test environment settings and control are not hard-coded. In the simplest form the tester supplies the inputs from a row in the table and expects the outputs which occur in the same row. The table typically contains values which correspond to boundary or partition input spaces. In the control methodology, test configuration is “read” from a database.
数据驱动测试(Data-driven testing)是一种软件测试的方式,数据驱动测试会配合一个有许多测试输入及对应的验证输出值的表格,而其测试环境设定及控制不会固定在程式码中。最简单的数据驱动测试会将表格的某一栏作为输入,同一列的另一栏则是预期的测试输出。表格内一般会对应输入值的边界或是输入值分组的边界。在有些测试中,会从数据库中读取测试组态。

从上面的定义可以看出数据驱动测试的好处有很多:
a.数据驱动测试是从数据文件(如Excel文件、csv、XML文件或数据库等)中读取测试数据,然后通过变量传入事先编写或录制好的测试脚本中,这些变量既可传递测试输入数据也可传递测试输出的验证数据;
b.测试数据只出现在数据文件中,测试脚本负责测试逻辑业务过程、测试状态以及数据文件读取,因此,测试数据和测试脚本是分开存放的;
c.数据文件中的每一行表示一组测试数据,通过循环遍历数据文件中的每一行,将数据逐一注入到相同的测试流程进行反复的测试验证;
d.数据驱动测试框架可减少为实现所有测试用例而需要编写的脚本数量,只需少量脚本即可产生大量测试用例,降低脚本创建和维护成本;
e.测试数据单独存放于数据文件中便于修改和维护;
f.数据存放结构清晰简单,有利于测试结果分析和错误跟踪。

2.Selenium_Python UI 自动化怎样实现数据驱动测试?
a.首先要确保python 可以打开存放测试数据的文件类型,以excel数据文件为例, 导入xlrd包:
命令行执行’\Scripts\easy_install.exe xlrd’
xlrd
b.准备测试数据文件login.xlsx
logindata
c.在Pycharm下面修改测试脚本admin_login.py
import xlrd

def test_login_as_admin(self):
driver = self.driver
driver.get(self.base_url + "/")

# data driven testing using python
# Read for XLSX Sheet names
# Learning from http://seleniumworks.blogspot.com/2014/02/selenium-data-driven-python-xlrd-xlsx.html
wb=xlrd.open_workbook('D:\ABA_Selenium_Testing\ABATesting\login.xlsx')
sheetname = wb.sheet_names()
sh1 = wb.sheet_by_index(0)

i=1
while (i<3): rownum=(i) rows = sh1.row_values(rownum) driver.find_element_by_name("username").clear() driver.find_element_by_name("username").send_keys(rows[0]) driver.find_element_by_name("password").clear() driver.find_element_by_name("password").send_keys(rows[1]) driver.find_element_by_xpath("//button[@type='submit']").click() driver.implicitly_wait(30) driver.find_element_by_css_selector("input.form-control.form-white.ng-pristine").clear() driver.find_element_by_css_selector("input.form-control.form-white.ng-pristine").send_keys(rows[2]) driver.find_element_by_xpath("//button[contains(text(), 'Search')]").click() driver.implicitly_wait(30) driver.find_element_by_link_text(rows[3]).click() driver.implicitly_wait(30) driver.find_element_by_name("firstName") driver.find_element_by_xpath("//span[@class='username ng-binding']").click() driver.implicitly_wait(30) driver.find_element_by_link_text("Logout").click() driver.find_element_by_class_name("account-info") i=i+1

d.执行测试用例,FireFox 自动测试pass.
pass
3.需要注意的问题:
a. import xlrd # excel 适用
import csv # csv file 适用
b. # 打开excel 文件,返回wb对象
wb=xlrd.open_workbook('D:\ABA_Selenium_Testing\ABATesting\login.xlsx')
sheetname = wb.sheet_names()
sh1 = wb.sheet_by_index(0)
c. rownumber 从0 开始,此处因为文件有header, 设置i 从第二行开始遍历row1,row2,
i=1
while (i<3): d. 不知道以后测试用例太多会怎样,现在测试下来,需要加好多等待时间; e. 这个之前也写过,开启浏览器以后,默认不是最大窗体,这样会有很多问题,比如定位元素不准确,所以要在开启浏览器以后把窗口最大化处理: def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "http://192.168.8.185:82/#/login"
self.driver.set_window_size(1382, 744) #配合屏幕分辨率来设置浏览器窗口大小
self.driver.maximize_window() #设置浏览器最大化显示
self.verificationErrors = []
self.accept_next_alert = True

f. 之前的程序只有登录,search 两个动作,没有logout, 但是现在需要测试多个用户的登录,所以循环一次都要加入一个登出动作,否则执行到第二个测试用例会报错:
driver.find_element_by_link_text("Logout").click()
driver.find_element_by_class_name("account-info")

g. i=i+1, 下一个循环开启之前i+1, 遍历下一个测试用例。

Pycharm 真的很好用~~~
网上查找到的Selenium_Python 的东西比Java 实在少太多TAT…有空把Java捡回来再看看吧,唉…
http://seleniumworks.blogspot.com/2014/02/selenium-data-driven-python-xlrd-xlsx.html

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.