自动化框架-数据驱动

匿名 (未验证) 提交于 2019-12-03 00:39:02

https://www.cnblogs.com/fnng/p/6111516.html

最近在整理接口测试相关的资料,所以,看到有关资料就会多看两眼。偶看到别人发的微信公众号。

曾几何时,也许某大牛说,搞自动化必须要把测试数据放文件里,然后通过程序读取文件。于是,大家纷纷效仿。

什么?你做自动化测试居然不读取测试数据文件,一看就是新手,没逼格。

小王啊!我们这个自动化框架一定得做数据与代码分离,得读取文件啊!

在这个全民微信的年代,各位大牛开了公从号,传授大家自动化测试技术,教点啥呢?那我们就从读取数据文件开始起吧!

什么是数据驱动?

从它的本意来解释,就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。说人话,其实就是参数化。

数据驱动有什么用?

对开发来说说,数据驱动无处不在,写好了一个模块,传个参数调用一下,看结果是不是等于预期。

def add(a,b):     return a + b   if __name__ == ‘__main__‘:     result = add(3, 5)     assert result == 8

对测试有来说就可厉害了,你知道早期的自动化测试(工具)都是流水式,第一步打开浏览器,第二步输入“abc”,第三步点击按钮。假如我有一个登录,登录的步骤完全一样,就是每次登录时用的账号密码不一样。用数据驱动啊!

# 伪代码 def login(username, password):     driver.find_element_by_id("idInput").send_keys(username)     driver.find_element_by_id("pwdInput").send_keys(password)     driver.find_element_by_id("loginBtn").click()   if __name__ == ‘__main__‘:     login("zhangsan","123")     #...     login("lisi","456")

看!是不是很厉害了我的数据驱动。我传zhangsan,程序就会用zhangsan登录,我传lisi,就会用lisi登录。

数据驱动的本质就是“测试数据”与“执行代码”做分离。至于,“测试数据”放哪儿都可以,

定义成变量:

username = "zhangsan"

password = "123"

或放到数组里

users =["zhangsan","123"]

或放到字典:

users = {"zhangsan":"123"}

或放到txt文件里,XML文件里,CSV文件里,再读取过出来,调用登录方法时使用,这其实都是可以的。

但是,我们要做的是自动化测试,要分用例的,一种情况一条用例。

--------------------------------------------------------------------

用例1,用户名密码为空。

用例2,用户名为空。

用例3,密码为空。

用例4,用户名密码正确。

----------------------------------------------------------

相信身为软件测试人员的你,对这个用例没有意见吧?

这里以你们喜闻乐见的读取csv文件为例。

读取数据文件,并得到相应的数据,把这些数据用到具体的某个用例当中。

from selenium import webdriver import unittest import csv   # 读取本地 CSV 文件 data = csv.reader(open(‘login_test.csv‘, ‘r‘))  # 读取整个文件的数据放到users数组 users = [] for i in data:     user = []     for j in i:         user.append(j)     users.append(user)   class loginTest(unittest.TestCase):      def setUp(self):         self.driver = webdriver.Chrome()         self.driver.get("http://xxx.login.page")      # 封装用户登录     def user_login(self, username, password):         self.driver.find_element_by_id("idInput").send_keys(username)         self.driver.find_element_by_id("pwdInput").send_keys(password)         self.driver.find_element_by_id("loginBtn").click()      def test_login1(self):         ‘‘‘用户名、密码为空登录‘‘‘         i = 0         for user in users:             print(user[0])             if user[0] == ‘user_pawd_null‘:                 print(i)                 username = users[i][1]                 password = users[i][2]
break; else: i +=1 self.user_login(username, password) def test_login2(self): ‘‘‘用户名正确,密码为空‘‘‘ username = users[1][1] password = users[1][2] self.user_login(username, password) def test_login3(self): ‘‘‘用户名为空,密码正确‘‘‘ username = users[2][1] password = users[2][2] self.user_login(username, password) def test_login4(self): ‘‘‘用户名密码正确 ‘‘‘ username = users[3][1] password = users[3][2] self.user_login(username, password) if __name__ == ‘__main__‘: unittest.main()

来看看你都干了什么高大上的事儿。

2、读取CSV文件,并且通过for循环,把所有数据组装成一个二维数组,并放users数组中。--->这没什么呀,只是多写了个for循环而已,继续自我感觉良好。

这就是你玩的高大上的“数据驱动”,再下实在是佩服佩服!什么你还有更高大上,简洁的玩法?真心请赐教。。。。

为什么不按照下面的方式写用例?

from selenium import webdriver import unittest   class loginTest(unittest.TestCase):      def setUp(self):         self.driver = webdriver.Chrome()         self.driver.get("http://xxx.login.page")      # 封装用户登录     def user_login(self, username, password):         self.driver.find_element_by_id("idInput").send_keys(username)         self.driver.find_element_by_id("pwdInput").send_keys(password)         self.driver.find_element_by_id("loginBtn").click()      def test_login1(self):         ‘‘‘用户名、密码为空登录‘‘‘         self.user_login("", "")          def test_login2(self):         ‘‘‘用户名正确,密码为空‘‘‘         self.user_login("", "123")      def test_login3(self):         ‘‘‘用户名为空,密码正确‘‘‘         self.user_login("zhangsan", "")      def test_login4(self):         ‘‘‘用户名密码正确 ‘‘‘         self.user_login("zhangsan", "123")   if __name__ == ‘__main__‘:     unittest.main()

我相信,正常人一定看出来了这比上面读CSV文件简单多了。可是,用读取数据文件的话,不懂代码也能写用例!你是在自我YY这种需求吧??不懂自动化测试的同学差点就信了!

“都已经开始写代码做自动化的你告诉我,不想懂开发,你确定这不是任性?”

我在CSV文件中改测试数和在代码中改测试数据有什么区别? 在代码中改测试数据,我是知道对应哪个用例的,在CSV文件中改你确定一下子就知道对应的哪个用例?

那什么情况下才要用到读取测试数据文件呢?

关于自动化测试的误区(二)

已经说明了自己的观点。这里就不再重复,总之,用到要读取文件的情况并不多。不管是UI自动化测试,还是接口自动化测试。

我们还可以借助单元测试框架的功能进行参数化:

unittest单元测试框架实现参数化

原文:https://www.cnblogs.com/jiaoyang77/p/9271317.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!