使用“数据驱动测试”之前应该知道的事儿

发表于:2023-11-13 09:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:虫师    来源:博客园

  什么是数据驱动测试
  从它的定义来看,就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。说的直白些,就是参数化的应用。
  “他们”认为数据驱动什么样子?
  这里以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阶段。如果你有更“高大上”的处理方式欢迎请告诉我,谢谢!
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号