我曾经写过一篇博客自动化测试 --- 被玩坏的数据驱动讨论过数据驱动测试, 当时主要是吐槽那些教大家读取 txt,csv/excel,xml 文件文章."我教大家如何做数据驱动测试, 来! 我们先学习如何读取 excel 文件...", 然后, 网上也有大量的文章来介绍如何用 excel 来管理测试数据的, 甚至是测试报告展示的.
读各种数据文件就是驱动测试? 这样真的方便做测试么?
什么是数据驱动测试?
从它的定义来看, 就是数据的改变从而驱动自动化测试的执行, 最终引起测试结果的改变. 说的直白些, 就是参数化的应用.
"他们" 认为数据驱动什么样子?
这里以 csv 文件为例, 大多文章也是选用的 csv/excel 文件.
参数, 断言, 结果都有了, 大概就这样子吧?
接下来需要将数据读取出来.
- # coding=utf-8
- import csv
- import codecs
- from itertools import islice
- # 读取本地 CSV 文件
- data = csv.reader(codecs.open('user_info.csv', 'r', 'utf_8_sig'))
- # 用户存放用户数据
- users = []
- # 循环输出每一行信息
- for line in islice(data, 1, None):
- users.append(line)
- # 打印
- print(users)
得到结果:
- [['','123','请输入帐号',''],
- ['user', '','请输入密码',''],
- ['error', 'error', '帐号或密码错误',''],
- ['admin', 'admin123', 'admin 你好', ''],
- ['guest', 'guest123', 'guest 你好', '']]
这里得到一个测试数据的二维数组.
那么接下来要用这些数据做自动化测试了? 被测试功能如下:
测试代码如下:
- # 测试登陆功能
- from selenium import webdriver
- from time import sleep
- driver = webdriver.Chrome()
- for user in users:
- driver.get("http://127.0.0.1:8000/")
- driver.find_element_by_id("inputUsername").send_keys(user[0])
- driver.find_element_by_id("inputPassword").send_keys(user[1])
- driver.find_element_by_id("Login").click()
- sleep(2)
- tips = driver.find_element_by_id("tips").text
- print(tips)
- print(user[2])
- try:
- assert tips == user[2]
- except AssertionError as msg:
- print(msg)
- user[3] = "Faile"
- else:
- user[3] = "Pass"
- driver.quit()
- # 打印结果
- print(users)
运行之后的测试结果:
- [['','123','请输入帐号','Pass'],
- ['user', '','请输入密码','Pass'],
- ['error', 'error', '帐号或密码错误','Pass'],
- ['admin', 'admin123', 'admin 你好', 'Faile'],
- ['guest', 'guest123', 'guest 你好', 'Faile']]
看, 结果已经写到最后一列了.
最后, 我们还需要将测试结果写回到 csv 文件中.
- # 读取本地 CSV 文件
- csv_file = csv.writer(codecs.open('user_info.csv', 'w','utf_8_sig'),
- dialect="excel")
- # 写入标题
- csv_file.writerow(['用户名','密码','断言','结果'])
- # 循环写入数据
- for user in users:
- csv_file.writerow(user)
- # 打印
- print(users)
打开 CSV 文件, 结果如下:
看结果一列, 是不是已经有了结果.
那么, 下来思考几个问题.
1, 测试结果是否太过简单了, 只有 "Pass" 和 "Faile", 没有任何失败的日志, 是否需要另起一列记录失败日志?
2, 如何统计出总失败的用例数和成功的用例数?
3, 如果想单独验证失败的两条用例应该怎么做? 例如上图中的最后两条失败的用例.
4, 上面的测试代码中, 有多少是真正用在测试操作的, 至少一半都在读写 csv 文件, 是否需要做封装, 想想怎么封装更简单?
5, 在获取具体读取数据的时候, 我们使用的是 user[0],user[1],user[2], 你真的容易分辨这些数据么? 如果又加了一列数据呢? 不改代码是不是就对不上号了.
6, 这只是一组登录数据. 我们知道不同的功能, 所需要的数据是不一样的, 比如搜索, 只需要 "搜索关键字", 例如注册, 需要 "邮箱","密码","重复密码","昵称" 等. 我们一个系统有 N 多功能的好吧!
7, 如第 6 条, 这些测试数据要怎么放, 放在一个 csv 文件还是多个文件? 怎么统计测试结果?
所以, 知道读取数据文件有多坑了吧!? 谁说的方便维护? 你一定没用这种方式写过真正的项目吧! 一直处在跟着别人写 demo 阶段. 如果你有更 "高大上" 的处理方式欢迎请告诉我, 谢谢!
下一篇, 我将介绍基于单元测试框架的数据驱动.
来源: https://www.cnblogs.com/fnng/p/9375172.html