• 15
  • 15
分享

  RequestsLibrary大家都不陌生,作为robotframework接口请求常用关键字被频繁使用。但是,笔者最近在写自动化接口用例时,发现RequestsLibrary库和N年前的老版本相比,还是有了不少改(优)变(化),在用法上来说还是有一点区别。那么,今天就让我们老生常谈,再聊聊这个RequestsLibrary库吧~

  一、版本对比

  RequestsLibrary最新版本为2021.4.22号发布的0.91版本,适配python2.x和python3.x,只需一句pip install robotframework-requests命令即可在线安装。

  与历史<0.8版本相比,0.9的版本兼容了0.8版本的功能,并更进一步优化。主要改变在以下方面:

  1)新的关键字结构:?所有请求关键字都已被重写,并在不久的将来允许在没有会话的情况下请求关键字。旧关键字* Request现已弃用,并将在 1.0.0 版本中删除。例如Get Request已经弃用,在0.8版本中用GET On Session替代;而在0.9版本中可以只用GET?不需要一个会话时。

  2)状态码上的隐式断言:?* On Session如果返回错误状态码,关键字会自动失败。?expect_status=可用于指定状态代码 (?201,?OK,?Bad request) 或者为any当你想自己判断响应码时。

  还是举个例子吧!

1-1.png

图1 RequestsLibrary新版http接口请求样例

  二、关键字详解

  大家是否发现了,图1中的Status Should Be关键字,在get请求后,使用Status Should Be判断请求响应码是否与预期一致。但与以往不同的时,该关键字不需要传入待判断的请求返回响应码,默认时判断最后一个http请求的响应码。对比起来,是不是简单、清晰多了?所以,我们还是一起再来看看0.91版本的RequestsLibrary关键字吧。

  该版本一共提供了33个关键字,列表如下:

1-2.png

  除开被替代的7个关键字,来说一说剩下的26个关键字的用法吧。

  1.创建会话关键字

1-3.png

表1 创建会话关键字

  RequestsLibrary提供了5个创建会话的关键字,乍一看也许你和此刻的我一样二脸懵逼,实在不太搞得清楚他们之间的区别。其实,他们之间没有太大的区别……,仅有的小区别就存在于传入的参数有略微不同,如上表1所示,已经用红色字体给大家标注出不同关键字之间参数差异。

  1)Create Client Cert Session

  alias:会话名,给一个建立的连接会话起一个名字以供rf区分,具有唯一性格;

  url:需要连接服务器的基础地址。比如图1所示样例中,最终要访问的是http://bbs.51testing.com/images/54646789.jpg,但建立会话的url为基础地址http://bbs.51testing.com;

  headers:http请求头部,是一些字典kv组合,如Accept: text/plain;

  client_certs:'client certificate', 'client key'] 包含客户端密钥和证书的 PEM 文件;

  timeout:连接超时时间,默认单位为s;

  proxies:包含http和https请求时的代理url;

  verify:是否验证SSL证书,主要在https请求时使用。设置为True时,需要提供CA_BUNDLE路径,默认为False;

  debug:设置debug等级,默认为0,表示无debug详细信息输出;

  max_retries:每个连接最大重试次数,默认为3;

  backoff_factor:每次重试后引入更长的重试之间的延迟时间。ReqestsLibrary底层引用urllib3的backoff_factor计算方法,计算公式为{backoff factor} * (2 ** ({number of total retries} - 1))。例如。如果 backoff_factor 设置为 0.1,则尝试之间的等待时间将为:0.0, 0.2, 0.4?;

  disable_warning:禁用告警,当测试用例多时,该参数很有用;

  retry_status_list:整数 HTTP 状态代码列表,如果响应码在该列表内,则尝试重试。例如设置为 [502, 503] 以在返回这些状态时重试请求。请注意,max_retries必须大于0;

  retry_method_list:允许重试的大写 HTTP 方法列表。默认情况下,仅允许对被认为是幂等的 HTTP 请求方法进行重试(具有相同参数的多个请求以相同状态结束)。例如。设置为 ['POST', 'GET'] 以仅重试POST和GET类型的请求。

  2)Create Custom Session

  其他相同参数不再赘述,单独说说不一样的参数auth。

  auth:要传递到请求库的自定义身份验证对象。例如:有一个web服务,该服务只在headers中X-Pizza设置为密码值时才会响应,则可以定义一个方法为PizzaAuth,传参为headers的X-Pizza值。然后使用Create Custom Session关键字,设auth=PizzaAuth(‘xxxx’)即可。

  3)Create Digest Session

  其他相同参数不再赘述,单独说说不一样的参数auth。

  auth:['DOMAIN', 'username', 'password'] 用于 DIGEST (一种验证方式)身份验证。

  4)Create Ntlm Session

  其他相同参数不再赘述,单独说说不一样的参数auth。

  auth:['DOMAIN', 'username', 'password'] 用于 NTLM (一种验证方式)身份验证。

  5)Create Session

  auth:HTTP 基本身份验证的用户名和密码列表。


  2.http请求关键字

1-4.png

表2 http请求关键字

  1)Get和Get On Session

  在第一节已经提到,* On Session在不久的将来1.0版本中将会被*替代,* On Session和*的区别只在于* On Session需要在请求前创建会话,然后通过alias参数引用该会话,而*(如GET,POST等)关键字则无需单独创建会话。

  url:用于接受http请求的网址,例如图1所示样例中,最终要访问的是http://bbs.51testing.com/images/54646789.jpg,使用Get关键字则需要填写完整链接http://bbs.51testing.com/images/54646789.jpg,使用Get On Session则只需填写/images/54646789.jpg;

  expected_status:可用于指定状态代码 (?201,?OK,?Bad request) 或者为any当你想自己判断响应码时;

  msg:当返回响应码与expected_status,自定义输出的信息;

  **kwargs:传入其他该关键字未定义参数,例如proxy,verify等等;

  我们举个例子,来看看expected_status与响应码不一致时的情况。以第一节样例稍作改动:

1-5.png

图2 expected_status与响应码不一致样例

  在图2例种,请求真实响应码为200,但我们预期为500,结果失败报错,返回提示信息即为设置的“状态码输入错误”。

  2)Delete和Delete On Session

  默认参数与Get关键字一致,不再赘述。

  3)Head和Head On Session

  默认参数与Get关键字一致,不再赘述。

  4)Patch和Patch On Session

  url:与Get中所述一致;

  data:可以时键值对字典、元组列表、字节或文件类数据。将被作为urlencoded类型数据或二进制数据发送;

  json:如果你想要传入的数据为json格式,则可以使用这个参数;

  expected_status,msg, **kwargs:同Get中所述一致。

  5)Post和Post On Session

  同Patch参数一致,不再赘述。

  6)Put和Put On Session

  同Patch参数一致,不再赘述。

  还是来举个例子吧~在http://www.51testing.com/batch.search.php地址中传入body=’刘晓佳’进行查询。

1-6.png

图3 post请求样例1,数据非json编码

  再举一个例子,加入存在url为http://xxxx/xxx/xx,接受Post请求,数据需要json编码,则可以使用Post的json参数传入,例举如下:

1-7.png

图4 post请求样例2,数据为json编码

  3.更新会话关键字

1-8.png

  更新指定会话alias的headers和cookies。

  4.关闭会话关键字

1-9.png

  删除所有存在的会话链接,若请求结束后不删除会话则会占用链接资源,对比大并发测试而言,使用完成的链接不及时清理则可能引起后续会话建链失败。

  5.断言关键字

1-10.png

  1)Session Exists

  判断名为alias的会话是否存在,若如存在则失败报错;

  2)Status Should Be

  判断响应码是否与expected_status一致,如图1中样例所示,若response不传入则默认对比最后一次请求的响应码;若传入response,则与对应的response响应码对比。

  三、还是来个小结吧

  虽然RequestsLibrary大家都在用,熟悉程度非常高。但新版发布后有的细节还是和原来有点差别,也许也有人和我一样对于一些不常用的关键字如Create Digest Session不是很了解,那么希望这篇文章能为你扫清迷惑。



作者:刘晓佳Rachel   

来源:http://www.51testing.com/html/49/n-4479949.html


2021 问卷礼物图.png

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、描述一下你们公司的性能测试流程?1)分析性能需求(用户使用最频繁的场景进行测试)确定性能指标(例如:事务通过率100%,top99%是5秒,最大并发是2000,CPU和内存都是70%以下);2)制定性能测试计划,明确测试时间、测试环境和测试工具;3)编写测试用例;4)搭建测试环境,准备测试数据、编写测试脚本;5)测试脚本优化:设置检查点,参数化,关联,集合点,事务,调整思考时间等;6)设计测试场景,运行测试脚本和监控服务器;7)分析测试结果,收集相关日志提单给开发;8)回归测试;9)编写测试报告。2、如果确定系统最大负载?通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应...
            0 2 1415
            分享
          •   新浪科技讯 北京时间1月16日晚间消息,据报道,微软正考虑对旧金山人工智能(AI)研究公司OpenAI投资100亿美元。分析人士称,这笔潜在交易有可能成为人工智能新时代的决定性交易。  如果微软对人工智能技术深远影响的押注是正确的,那么这笔交易还可能引发人工智能世界的一场重组,因为其他科技公司也竞相在“生成式人工智能”(Generative AI)的新领域争夺自己的位置。  上个月,OpenAI因为推出了一款智能聊天机器人系统ChatGPT而成为了全球关注的焦点。ChatGPT是一套人工智能系统,可以回答问题,并用听起来十分自然的语言生成文本。  ChatGPT很快就得到了微软的关注。微软...
            0 0 832
            分享
          • 51testing软件测试圈8月更文暴击已经结束啦,感谢各位的参与。本次更文活动的时间从2022年8月11日-2022年9月9日!合计参加本期更文活动的作者4名,合计更文47篇,详细更文情况和评审情况如表所下:序号作者名称更文篇数符合要求数优质文章活动规则首发文章数1Carl_奕然222218发布文章篇数≥2122王鑫21212发布文章篇数≥21183米橙果柠110发布文章篇数≥114九哥333发布文章篇数≥10获奖名单恭喜:(点击作者名字可查看其所有文章)Carl_奕然王鑫请获奖用户及时联系恬恬圈或甜甜圈领取奖励点击右侧可查看本期更文活动全部文章:“大佬养成计划”活动主题解锁8月更文暴击活动...
            1 1 4132
            分享
          • 本文通俗易懂,例举了大量生活的案例,详细阅读完成后能对人工智能有更深刻的见解。一  文章列表1. 机器学习简介1.1什么是机器学习1.2机器学习如何工作1.3机器学习和人工智能1. 机器学习简介1.1什么是机器学习机器学习是人工智能的一门学科,用于构建通过经验自动改进并做出预测的计算机程序。让我们看一个了解机器学习需求的实际应用。有亚马逊、等各种互联网商店,它们利用用户过去的购买历史和过去的查看来吸引用户购买一些额外的物品。使用这些信息,这些网站将预测用户未来购买和查看产品的情况。这背后的想法是,这些网站将分析购买、愿望清单、购物车和类似用户的观点。总是希望使整个...
            0 0 883
            分享
          • 摘要:做测试久了,会在所难免地碰到职业瓶颈期,这很正常,从事任何职业的工作人员都会遇到,关键是要看你如何去克服它。对优秀的软件测试人员来讲,除了要具备全面的技能、丰富的经验、良好的心理素质,最重要的还有:态度。有端正的态度,会产生责任心,去尽力完成一切工作,克服困难。 关键词:软件测试 瓶颈期 克服 从事软件测试工作久了,人容易变懒,因为重复、单调的工作比较多。继而会觉得遇到了瓶颈期:不想一直停留在测试需求分析,设计、编写、评审测试用例,执行测试,写测试脚本和测试报告,管理测试工具等。但是除了上面的工作,我们软件测试人员还能做些什么?怎么来提高软件测试...
            7 6 2451
            分享
      • 51testing软件测试圈微信