httprunner学习26-cookies关联(403 Forbidden问题解决)

前言

在使用httprunner写接口自动化用例时,遇到有些接口需要用到cookies,如果cookie没关联起来的话,会出现403 Forbidden的问题

问题描述

用httprunner写了个网页的登录用例,以下是相关的脚本参考test_cookie_demo.yml

- config: name: test login api demo variables: {} request: base_url: http://49.235.x.x:80xx - test: name: 测试用例名称 request: headers: Content-Type: application/x-www-form-urlencoded data: csrfmiddlewaretoken: ChMBwCgvH04sOA1XhPkPzUbfKDD5O8lmqAYR0oWIvSH2waMWpnzaxytvj8EUQgCF username: admin1 password: 1111111***** method: POST url: /xadmin/ validate: - eq: - status_code - 200

运行结果

D:\soft\code\demo>hrun test_cookie_demo.yml 测试用例名称 INFO POST /xadmin/ ERROR 403 Client Error: Forbidden for url: http://49.235.x.x:80xx/xadmin/ INFO start to validate. ERROR validate: status_code equals 200(int) ==> fail 403(int) equals 200(int) ERROR request: headers: {'content-type': 'application/x-www-form-urlencoded'} json: {'data': 'ChMBwCgvH04sOA1XhPkPzUbfKDD5O8lmqAYR0oWIvSH2waMWpnzaxytvj8EUQgCF', 'username': 'admin', 'password': '11111111***'} ERROR response: status_code: 403

运行结果出现:403 Forbidden

cookies关联

出现403 Forbidden问题,一般是网站处于安全考虑,缺少cookies导致,可以在页面登录的时候,用fiddler抓一个登陆成功的包对比下就知道了

那么这个cookies从哪来的呢,一般是浏览器打开登录首页的时候(还没输入账号和密码的时候),服务端会返回cookies过来,浏览器会记住缓存。
所以解决这个问题就模拟浏览器打开登录页一样,先发个get请求访问登录首页,获取到cookie后再去登录

httprunner框架继承了requests库的优良特征,会自动管理cookie(看到有些同学费尽周折去提取cookies,又去关联cookies,其实没必要)

- config: name: test login api demo variables: {} request: base_url: http://49.235.x.x:80xx - test: name: 先访GET问登录首页,获取cookies request: method: GET url: /xadmin/ extract: - csrfmiddlewaretoken: name='csrfmiddlewaretoken' value='(.+?)' # 页面正则提取隐藏参数csrfmiddlewaretoken validate: - eq: - status_code - 200 - test: name: 登录用例 request: headers: Content-Type: application/x-www-form-urlencoded data: csrfmiddlewaretoken: $csrfmiddlewaretoken username: admin1 password: 1111111***** this_is_the_login_form: "1" next: /xadmin/ method: POST url: /xadmin/ validate: - eq: - status_code - 200

运行结果

D:\soft\code\demo>hrun test_cookie_demo.yml 先访GET问登录首页,获取cookies INFO GET /xadmin/ INFO status_code: 200, response_time(ms): 34.57 ms, response_length: 4163 bytes INFO start to extract from response object. INFO start to validate. . 登录用例 INFO POST /xadmin/ INFO status_code: 200, response_time(ms): 132.31 ms, response_length: 4400 bytes INFO start to validate. . ---------------------------------------------------------------------- Ran 2 tests in 0.181s OK INFO Start to render Html report ... INFO Generated Html report: D:\soft\code\demo\reports\2020_02_21 23_21_19.html

使用fiddler抓包查看,会发现cookie已经关联成功了

隐藏参数csrfmiddlewaretoken

csrfmiddlewaretoken参数是html页面上的隐藏参数,这个在django系列教程里面提到过,是为了防止跨域伪造请求。
每次刷新页面都会自动变的,所以需要先把此参数提取出来,动态关联到请求参数的body里面去

(0)

相关推荐

  • ModuleNotFoundError: No module named 'xadmin'

    ModuleNotFoundError: No module named 'xadmin'

  • httprunner学习27-参数关联时在 yaml 文件 int 和 str 数据类型转换

    前言 使用httprunner框架参数关联的时候,最近遇到小伙伴们问的一个问题,上个接口返回的值是一个字符串类型(如: "123456"),下个接口要用到这个值,但是需传int类型 ...

  • httprunner学习3-extract提取token值参数关联

    前言 如何将上个接口的返回token,传给下个接口当做请求参数?这是最常见的一个问题了. 解决这个问题其实很简单,我们只需取出token值,设置为一个中间变量a,下个接口传这个变量a就可以了.那么接下 ...

  • httprunner 3.x学习20 - jmespath取值特殊字符问题解决

    前言 jmespath在取值的时候,遇到一些特殊的字符处理起来会比较麻烦. httprunner3.x提取和校验结果都是用jmespath取值,本篇总结几个常见的问题 使用案例 访问/api/test ...

  • httprunner学习1-环境与登录接口案例

    前言 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试. 使用环境: python 3.6 httprunner 1 ...

  • httprunner学习2-har2case录制生成脚本

    前言 复制毁一生,录制穷三代,如果你只是因为不想写脚本,而去录制脚本,那我建议你还是别学录制了. 录制脚本,只是一个过渡,从0到1的一个过渡,如果让你直接写脚本,你会无从下手,可以将录制的脚本快速转化 ...

  • httprunner学习4-variables变量声明与引用

    前言 在 HttpRunner 中,支持变量声明(variables)和引用($var)的机制.在 config 和 test 中均可以通过 variables 关键字定义变量,然后在测试步骤中可以通 ...

  • httprunner学习5-参数化与数据驱动

    前言 参数化是自动化测试离不开的话题,httprunner里面只要把上一篇声明变量学会了,参数化也就自然会了. 不同的地方在于声明变量时对应值只有一个,参数化是多个值,存放在list里面. 登录参数化 ...

  • httprunner学习8-validate校验器

    前言 在一个完整的测试用例中,断言是必不可少的,断言是拿实际结果和期望结果去比较,在httprunner中用validate来对比测试结果. validate校验器 在httprunner的源码里,u ...

  • httprunner学习7-extract提取content返回对象

    前言 提取response返回的对象数据,用extract关键字.前面有关于token的取值,通过content.token取值. 本篇详细讲解如何从返回的json数据提取出想要的各种数据 conte ...