1. # 1 http_request.py
  2.  
  3. import requests
  4.  
  5. class HttpRequest:
  6. def http_request(self, url, method, data=None, cookie=None):
  7. try:
  8. if method.upper() == "GET":
  9. res = requests.get(url, data, cookies=cookie)
  10. elif method.upper() == "POST":
  11. res = requests.post(url, data, cookies=cookie)
  12. else:
  13. print("请输入正确的参数")
  14. except Exception as e:
  15. print("请求报错了:{}".format(e))
  16. raise e
  17. return res
  18.  
  19. if __name__ == '__main__':
  20. # 登录
  21. login_url = "http://v.rainbowred.com/login"
  22. login_data = {"username": "15546355872",
  23. "password": "123456",
  24. "rememberCheck": "1",
  25. "loginStatus": "1",
  26. "rememberStatus": "1",
  27. "autoLogin": "0",
  28. "language": "zh"}
  29. login_res = HttpRequest().http_request(login_url, "post", login_data)
  30. print(login_res.json())
  31.  
  32. # 选择公司
  33. c_url = "http://v.rainbowred.com/chc"
  34. c_data = {"companyId": "21"}
  35. c_res = HttpRequest().http_request(c_url, "post", c_data, cookie=login_res.cookies)
  36. print(c_res.json())
  37.  
  38. # 2. do_excel.py
  39. # 把数据从excel中读取出来
  40. from openpyxl import load_workbook
  41.  
  42. class DoExcel:
  43. def get_data(self, file, sheet):
  44. wb = load_workbook(file)
  45. sheet = wb[sheet]
  46.  
  47. test_data = []
  48. for i in range(2, sheet.max_row+1):
  49. row_data = {}
  50. # 数值类型读出来还是数值,不用使用函数eval转换
  51. row_data["case_id"] = sheet.cell(i, 1).value
  52. row_data["url"] = sheet.cell(i, 2).value
  53. row_data["method"] = sheet.cell(i, 3).value
  54. row_data["data"] = eval(sheet.cell(i, 4).value)
  55. row_data["title"] = sheet.cell(i, 5).value
  56. row_data["expected"] = sheet.cell(i, 6).value
  57. test_data.append(row_data)
  58. return test_data
  59.  
  60. def write_back(self, file, sheet, i, j, value):
  61. wb = load_workbook(file)
  62. sheet = wb[sheet]
  63. # 写入测试结果, value必须是数据或者字符串类型才能被写回,写入数据前必须关闭工作簿
  64. sheet.cell(i, j).value = value
  65. # 保存工作簿
  66. wb.save(file)
  67.  
  68. if __name__ == '__main__':
  69. test_data = DoExcel().get_data("../test_data/test_data.xlsx", "company")
  70. print(test_data)
  71.  
  72. # 3. run.py
  73. # 关联接口测试,通过全局变量传递cookie
  74. from API_AUTO.tools.http_request import HttpRequest
  75. from API_AUTO.tools.do_excel import DoExcel
  76. COOKIE = None
  77.  
  78. def run(test_data):
  79. global COOKIE
  80. for item in test_data:
  81. print("正在测试的用例是:{}".format(item["title"]))
  82. res = HttpRequest().http_request(item["url"], item["method"], item["data"], cookie=COOKIE)
  83. if res.cookies:
  84. COOKIE = res.cookies
  85. print("测试的结果是:{}".format(res.json()))
  86. DoExcel().write_back("test_data/test_data.xlsx", "company", item["id"]+1, str(res.json()))
  87.  
  88. test_data = DoExcel().get_data("test_data/test_data.xlsx", "company")
  89. run(test_data)

  

chap4-关联接口测试-通过全局变量传递cookie的更多相关文章

  1. unittest(7)-作业- 全局变量传递cookie

    全局变量存储cookie 测试类中有多个测试函数 # 1.http_requset.py import requests class HttpRequest: def http_request(sel ...

  2. Jmeter接口测试实战-数据传递

    Jmeter接口测试实战-数据传递 接口与接口之间没有关联的测试是缺乏意义和没有灵魂的,只有数据在不同接口之间传递才能勾画出业务场景重要的链路. 我们用较为通用的http/https协议,接口普遍返回 ...

  3. Jmeter中传递cookie值

    场景:用户登陆后会本地会保存cookie,cookie是用来跟服务端验证此用户已经登陆过的重要信息,但是如何获取并在其他请求时将此cookie传递给服务器呢? 在线程组下面之直接添加HTTP Cook ...

  4. Jmeter跨线程组传递cookie,以禅道系统为例;BeanShell的存取数据的使用

    先看下脚本结构: 思路:将登陆请求放在setUp Thread Group中:把登陆后的cookie通过正则提取出来,然后存为全局变量,传递到下一个线程组中: 第一步:添加setUp Thread G ...

  5. 使用curl传递cookie错误的问题

    工作中发现一个问题, 通过curl调用接口传递cookie操作用户的数据, 接口的程序解析不了cookie中的数据. 经过排查发现curl发送的cookie数据为 TZ+Gn+rEk+6G4d 而接口 ...

  6. Android 使用全局变量传递数据

    使用全局变量传递数据,所谓的全局变量类似于jee开发中的application变量.申明后,全局调用.只有当内存被清理后,才被销毁.否则一直可以调用. 还是使用点击一个button,传递一个数据到另一 ...

  7. Jmeter 接口测试实战-有趣的cookie

    Jmeter 接口测试实战-有趣的cookie 场景: 接口测试时常都需要登录,请求方式(post), 登录常用的方法有通过获取token, 获取session, 获取cookie, 等等. 这几种都 ...

  8. node下的跨域传递cookie

    研究背景: 最近有一位朋友找工作,需要面试,涉及到面试就涉及面试题,于是我想起来鄙人之前面试被问到的一个跨域传递cookie的问题.搜索了相关资料,但自己不敲一下肯定是不足以让人信服的. 我用node ...

  9. activity之间通过全局变量传递数据

    activity之间通过全局变量传递数据 一.简介 Application域中的onCreate方法是Android程序的入口,Android程序运行的时候就自动加载Application的对象,感觉 ...

随机推荐

  1. 《Docekr入门学习篇》——Docker网络及数据卷

    Docker网络设置 默认情况下docker会创建一个桥接网卡[docker 0],docker有两种映射方式,一种是随机映射,一种是指定映射. 提示:生产场景一般不使用随机映射,但是随机映射的好处是 ...

  2. POJ-1703 Find them, Catch them(并查集&数组记录状态)

    题目: The police office in Tadu City decides to say ends to the chaos, as launch actions to root up th ...

  3. 吴裕雄--天生自然ShellX学习笔记:Shell 输入/输出重定向

    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...

  4. 黑马_13 Spring Boot:04.spring boot 配置文件

    13 Spring Boot: 01.spring boot 介绍&&02.spring boot 入门 04.spring boot 配置文件 05.spring boot 整合其他 ...

  5. 估计量|估计值|矩估计|最大似然估计|无偏性|无偏化|有效性|置信区间|枢轴量|似然函数|伯努利大数定理|t分布|单侧置信区间|抽样函数|

    第二章 置信区间估计 估计量和估计值的写法? 估计值希腊字母上边有一个hat 点估计中矩估计的原理? 用样本矩来估计总体矩,用样本矩的连续函数来估计总体矩的连续函数,这种估计法称为矩估计法.Eg:如果 ...

  6. Vue专题-js常用指令

    vue.js官方给自己的定为是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍了vue.js的常用指令. vue.js常用指令 Vue.js使用方式及文本插值 Vue.js 使用了基于 HTML ...

  7. python模块——datetime

    datetime模块是python自带对时间的操作,其常用的四大类分别是date.time.datetime.timedelta.下面分别讲解下这四大类中常用的方法及其属性. date类 date类的 ...

  8. 给Office文档添加水印效果【测试有效】

    private void button1_Click(object sender, EventArgs e) { string test1 = "C:\\test.docx";// ...

  9. Iterator接口(迭代器)的使用

    Iterator接口(迭代器) 前言 在程序开发中,经常需要遍历集合中的所有元素.针对这种需求,JDK专门提供了一个接口java.util.Iterator.Iterator接口也是Java集合中的一 ...

  10. [原]livekd使用问题记录

    sysinternal suite中的livekd.exe可谓神器.可以用来观察本地内核的一些状态,当然抓内核dump再合适不过了. 在使用livekd的时候遇到了一些问题,现总结如下: 使用live ...