【python+Excel】读取和存储测试数据完成接口自动化测试

http_request2.py用于发起http请求

  1. #读取多条测试用例

  2. #1、导入requests模块

  3. import requests

  4. #从 class_12_19.do_excel1导入read_data函数

  5. from do_excel2 import read_data

  6. from do_excel2 import write_data

  7. from do_excel2 import count_case

  8. #定义http请求函数

  9. COOKIE=None

  10. def http_request2(method,url,data):

  11. if method=='get':

  12. print('发起一个get请求')

  13. result=requests.get(url,data,cookies=COOKIE)

  14. else:

  15. print('发起一个post请求')

  16. result=requests.post(url,data,cookies=COOKIE)

  17. return result #返回响应体

  18. # return result.json() #返回响应结果:结果是字典类型:{'status': 1, 'code': '10001', 'data': None, 'msg': '登录成功'}

  19. #从Excel读取到多条测试数据

  20. sheets=['login','recharge','withdraw']

  21. for sheet1 in sheets:

  22. max_row=count_case(sheet1)

  23. print(max_row)

  24. for case_id in range(1,max_row):

  25. data=read_data(sheet1,case_id)

  26. print('读取到第{}条测试用例:'.format(data[0]))

  27. print('测试数据 ',data)

  28. #print(type(data[2]))

  29. #调用函数发起http请求

  30. result=http_request2(data[4],data[2],eval(data[3]))

  31. print('响应结果为 ',result.json())

  32. if result.cookies:

  33. COOKIE=result.cookies

  34. #将测试实际结果写入excel

  35. #write_data(case_id+1,6,result['code'])

  36. write_data(sheet1,case_id+1,7,str(result.json()))

  37. #对比测试结果和期望结果

  38. if result.json()['code']==str(data[5]):

  39. print('测试通过')

  40. #将用例执行结果写入Excel

  41. write_data(sheet1,case_id+1,8,'Pass')

  42. else:

  43. write_data(sheet1,case_id+1,8,'Fail')

  44. print('测试失败')

do_excel2.py完成对excel中用例的读、写、统计

  1. # 导入load_workbook

  2. from openpyxl import load_workbook

  3. #读取测试数据

  4. #将excel中每一条测试用例读取到一个列表中

  5. #读取一条测试用例——写到一个函数中

  6. def read_data(sheet_name,case_id):

  7. # 打开excel

  8. workbook1=load_workbook('test_case2.xlsx')

  9. # 定位表单(test_data)

  10. sheet1=workbook1[sheet_name]

  11. print(sheet1)

  12. test_case=[] #用来存储每一行数据,也就是一条测试用例

  13. test_case.append(sheet1.cell(case_id+1,1).value)

  14. test_case.append(sheet1.cell(case_id+1,2).value)

  15. test_case.append(sheet1.cell(case_id+1,3).value)

  16. test_case.append(sheet1.cell(case_id+1,4).value)

  17. test_case.append(sheet1.cell(case_id+1,5).value)

  18. test_case.append(sheet1.cell(case_id+1,6).value)

  19. return test_case #将读取到的用例返回

  20. #调用函数读取第1条测试用例,并将返回结果保存在data中

  21. # data=read_data(1)

  22. # print(data)

  23. #将测试结果写会excel

  24. def write_data(sheet_name,row,col,value):

  25. workbook1=load_workbook('test_case2.xlsx')

  26. sheet=workbook1[sheet_name]

  27. sheet.cell(row,col).value=value

  28. workbook1.save('test_case2.xlsx')

  29. #统计测试用例的行数

  30. def count_case(sheet_name):

  31. workbook1=load_workbook('test_case2.xlsx')

  32. sheet=workbook1[sheet_name]

  33. max_row=sheet.max_row #统计测试用例的行数

  34. return max_row

test_case2.xlsx存储测试用例

补充知识:python用unittest+HTMLTestRunner+csv的框架测试并生成测试报告

直接贴代码:

  1. import csv # 导入scv库,可以读取csv文件

  2. from selenium import webdriver

  3. import unittest

  4. from time import sleep

  5. import time

  6. import os

  7. import HTMLTestRunner

  8. import codecs

  9. import sys

  10. dr = webdriver.Chrome()

  11. class testLo(unittest.TestCase):

  12. def setUp(self):

  13. pass

  14. def test_login(self):

  15. '''登陆测试'''

  16. path = 'F:\\Python_test\\'

  17. # 要读取的scv文件路径

  18. my_file = 'F:\\pythonproject\\interfaceTest\\testFile\\ss.csv'

  19. # csv.reader()读取csv文件,

  20. # Python3.X用open,Python2.X用file,'r'为读取

  21. # open(file,'r')中'r'为读取权限,w为写入,还有rb,wd等涉及到编码的读写属性

  22. #data = csv.reader(codecs.open(my_file, 'r', encoding='UTF-8',errors= 'ignore'))

  23. with codecs.open(my_file, 'r', encoding='UTF-8',errors= 'ignore') as f:

  24. data=csv.reader((line.replace('\x00','') for line in f))

  25. # for循环将读取到的csv文件的内容一行行循环,这里定义了user变量(可自定义)

  26. # user[0]表示csv文件的第一列,user[1]表示第二列,user[N]表示第N列

  27. # for循环有个缺点,就是一旦遇到错误,循环就停止,所以用try,except保证循环执行完

  28. print(my_file)

  29. for user in data:

  30. print(user)

  31. dr.get('https://passport.cnblogs.com/user/signin')

  32. # dr.find_element_by_id('input1').clear()

  33. dr.find_element_by_id('input1').send_keys(user[0])

  34. # dr.find_element_by_id('input2').clear()

  35. dr.find_element_by_id('input2').send_keys(user[1])

  36. dr.find_element_by_id('signin').click()

  37. sleep(1)

  38. print('\n' + '测试项:' + user[2])

  39. dr.get_screenshot_as_file(path + user[3] + ".jpg")

  40. try:

  41. assert dr.find_element_by_id(user[4]).text

  42. try:

  43. error_message = dr.find_element_by_id(user[4]).text

  44. self.assertEqual(error_message, user[5])

  45. print('提示信息正确!预期值与实际值一致:')

  46. print('预期值:' + user[5])

  47. print('实际值:' + error_message)

  48. except:

  49. print('提示信息错误!预期值与实际值不符:')

  50. print('预期值:' + user[5])

  51. print('实际值:' + error_message)

  52. except:

  53. print('提示信息类型错误,请确认元素名称是否正确!')

  54. def tearDown(self):

  55. dr.refresh()

  56. # 关闭浏览器

  57. dr.quit()

  58. if __name__ == "__main__":

  59. # 定义脚本标题,加u为了防止中文乱码

  60. report_title = u'登陆模块测试报告'

  61. # 定义脚本内容,加u为了防止中文乱码

  62. desc = u'登陆模块测试报告详情:'

  63. # 定义date为日期,time为时间

  64. date = time.strftime("%Y%m%d")

  65. time = time.strftime("%Y%m%d%H%M%S")

  66. # 定义path为文件路径,目录级别,可根据实际情况自定义修改

  67. path = 'F:\\Python_test\\' + date + "\\login\\" + time + "\\"

  68. # 定义报告文件路径和名字,路径为前面定义的path,名字为report(可自定义),格式为.html

  69. report_path = path + "report.html"

  70. # 判断是否定义的路径目录存在,不能存在则创建

  71. if not os.path.exists(path):

  72. os.makedirs(path)

  73. else:

  74. pass

  75. # 定义一个测试容器

  76. testsuite = unittest.TestSuite()

  77. # 将测试用例添加到容器

  78. testsuite.addTest(testLo("test_login"))

  79. # 将运行结果保存到report,名字为定义的路径和文件名,运行脚本

  80. report = open(report_path, 'wb')

  81. #with open(report_path, 'wb') as report:

  82. runner = HTMLTestRunner.HTMLTestRunner(stream=report, title=report_title, description=desc)

  83. runner.run(testsuite)

  84. # 关闭report,脚本结束

  85. report.close()

csv文件格式:

备注:

使用python处理中文csv文件,并让execl正确显示中文(避免乱码)设施编码格式为:utf_8_sig,示例:

  1. '''''

  2. 将结果导出到result.csv中,以UTF_8 with BOM编码(微软产品能正确识别UTF_8 with BOM存储的中文文件)存储

  3. '''

  4. #data.to_csv('result_utf8_no_bom.csv',encoding='utf_8')#导出的结果不能别excel正确识别

  5. data.to_csv('result_utf8_with_bom.csv',encoding='utf_8_sig')

以上这篇python利用Excel读取和存储测试数据完成接口自动化教程就是小编分享给大家的全部内容了,希望能给大家一个参考。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值