Python自动化学习笔记(一)——接口测试基础

1.1 接口基础知识

 1.1.1    Get&post请求

GET和POST请求:

      GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.

      POST请求是把提交的数据放在HTTP包的Body中.

      get请求可以用浏览器来发送,直接输入URL,post请求需借助工具来发送。

 GET请求和POST请求的区别:

GET使用URL或Cookie传参。而POST将数据放在BODY中。也就是说get请求没有请求体,只有请求头。

get请求没有post安全,因为get把参数都写到url里面

get请求有参数的大小限制,post请求没有大小限制。

get请求一般用来获取数据,像服务端发送数据的时候用post

   个人理解来说,第二点和第三点区别比较勉强,get请求虽然将参数暴露在url中,看起来很不安全,但post请求也并没有好到哪里去,只要抓包,它的参数照样无所遁形,而第三点呢,在 HTTP 协议定义中,没有对GET请求的数据大小限制,所谓的get请求有参数大小限制,不过是浏览器的限制而已。


1.1.2 关于请求体和请求头

HTTP请求报文由3部分组成(请求行+请求头+请求体):

请求头

      header

      你发出去这个请求的额外信息,例如你用什么浏览器发的,你想让服务端给你返回什么样的数据等

      cookie

请求体

      body

      发送给服务端的参数


1.1.3   http状态码

HTTP状态码是用以表示HTTP响应状态的3位数字代码。

每发出一个http请求之后,都会有一个响应,http本身会有一个状态码,来标示这个请求是否成功,常见的状态码有以下几种:

1、200 2开头的都表示这个请求发送成功,200请求已成功,请求所希望的响应头或数据体将随此响应返回。

2、300 3开头的代表重定向,302请求的资源现在临时从不同的 URI 响应请求。301 - 资源(网页等)被永久转移到其它URL

3、400 400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404 - 请求的资源(网页等)不存在

4、500 5开头的代表服务器有异常,500代表服务器内部异常,504代表服务器端超时,没返回结果

-部分摘自网站:www.besttest.cn

1.1.4    cookiesession

cookie和session被用来跟踪用户的会话 。

cookie是在本地存的键值对,session是在服务端存的键值对

在使用postman和jmeter时,cookie 可以在header发送出去,为键对{'Cookie':’xx=xx,xx=xx,xx=xx'}的格式


1.2接口用例设计

1.2.1 测试内容

  通过性验证、接口安全、异常验证(必传非必传、参数类型、入参长度)、业务逻辑

    例如:接口安全关键字段如密码有没有加密 (F12开发者工具-network)

1.2.2 用例参考


 

 


1.3 postman请求接口

 1.3.1postman-get示例


 

1.3.2postman-post示例


 

 


1.3.3postmant添加cookie


1.3.4postman使用json格式发送数据


 

 


1.4jmeter请求接口

1.4.1简单的get请求


 

 


 

 


1.4.2get请求的两种参数方式


 


 

 

 


1.4.3post请求


 

 


1.4.4添加cookie

选中请求-右键-添加-配置元件-HTTP信息头管理器


 

 


1.4.5 jmeter参数化

1.4.5.1 函数助手对话框

选项-函数助手对话框-选择__Random,随机生成一个指定范围的整数,将生成的字符串复制粘贴来使用


 

 

1.4.5.2CSV Data Set Config

选中请求-右键-添加-配置元件-CSV Data Set Config


 

 

1.4.6jmeter关联

1.4.6.1json提取

从一个请求的响应结果中提取参数,用于下一个请求

选中请求-右键-添加-后置处理器-jp@gc - JSON Path Extractor(只要有json字样就可以)


 

 

引用json提取的值:${sign}

1.4.6.2正则表达式提取

选中请求-右键-添加-后置处理器-jp@gc - 正则表达式提取器

响应报文: { "error_code": 0, "login_info": { "login_time": "20180520170814", "sign": "337ca4cc825302b3a8791ac7f9dc4bc6", "userId": 1 } } 正则表达式提取: "sign": "(.*)"


 

引用正则表达式提取的值:${sign}


1.4.7响应断言

响应结果:{ "error_code": 0, "login_info": { "login_time": "20181108131056", "sign": "e9cff923a69dbcc96e1b6cd0d26aed58", "userId": 9786 } }

添加断言:选中请求-右键-添加-断言-响应断言


 

响应结果中若包含sign字符串,则请求通过,不包含sign字符串,则请求失败


1.5 Jmeter压测

1.5.1线程组

线程组相当于有多个用户,同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。


 

1 默认情况下,测试开始的时候,所有线程就被创建完了。如果勾选了此选项,那么线程只会在合适的需要用到的时候创建。

Ramp-Up Period: 线程启动的时间,如:5个线程,5秒启动时间。那么每秒会启动一个线程。

调度器 如果不想立即执行,可以通过调度器控制测试执行的开始时间和结束时间。

 启动时间:控制测试在某个时间点启动。这个配置会被“启动延迟(秒)”配置覆盖。

结束时间:控制测试执行的结束时间。这个配置会被“持续时间(秒)”配置覆盖。

持续时间(秒):控制测试执行的时间。比如如果你要让用户持续不断登录1个小时,你可以在文本框中填写3600。如果在1小时以内,结束时间已经到达,它将会覆盖结束时间,继续执行。

启动延迟(秒):控制测试多久后启动执行。


1.5.2聚合报告

选中请求-右键-添加-监听器-聚合报告


 

1

猜你喜欢

转载自www.cnblogs.com/luoyc/p/9928612.html