接口自动化测试--入门

一、什么是接口自动化测试?

     让程序或工具代替人工自动化的完成对接口进行测试的一种过程。

二、实现方式:

  1. 工具(Jmeter,postman)
  2. 代码(python-requests)

三、测试工具缺点:

  1. 测试数据不好控制(无法直接读取或存储json格式)
  2. 测试数据加密不方便
  3. 扩展性不足(复杂业务逻辑)

四、本次学习目标:基于python结合requesrs库实现接口自动化测试

五、Requests库介绍:

  1. 使用python语言编写
  2. 使用开源协议,基于urllib库做的二次封装
  3. Requests库中封装了相应接口测试方法

 1、GET方法(响应状态码:200)

#1.导包
import requests
#2.调用get
url="http://127.0.0.1:8080/demo/cheliangxinxi/list/"
r=requests.get(url)
#3.获取请求url地址
print("url为:",r.url)
#4.获取响应状态码
print("状态码为:",r.status_code)
#5.获取响应信息,文本形式
print("响应信息为:",r.text)
print(r.headers)
l=r.encoding='ASCI'
print(r.encoding)

2、GET方法请求带参数

#1.导包
import requests

#2.调用get
url="http://www.baidu.com"
#参数:params:字典或字符串(推荐使用字典)
#字典
params={"id":1001,"kw":"北京"}  # %2c ASCI值为逗号
#字符串
#r=requests.get(url,params="id=1001")
r=requests.get(url,params=params)
#不推荐写法
#url="http://www.baidu.com?id=1001"
#3.获取请求url地址
print("url为:",r.url)
#4.获取响应状态码
print("状态码为:",r.status_code)
#5.获取响应信息,文本形式
print("响应信息为:",r.text)

3、PUT方法(响应状态码:200或201)

import requests
url="http://127.0.0.1:8080/demo/cheliangxinxi/edit/180/"
headers={"Content-Type":"application/json"}
data={
    "data": [{
        "id": "180",
        "chehao":"T01",
        "pinzhong": "Test学院update"
    }]
}

r=requests.put(url,json=data,headers=headers)
print(r.json())

print(r.status_code)

4、POST方法(响应状态码:201)

import requests
url="http://127.0.0.1:8080/demo/cheliangxinxi/add/"
headers={"Content-Type":"application/json"}
data={
    "data": [{
        "chehao":"T01",
        "pinzhong": "Test学院"
    }]
}

r=requests.post(url,json=data,headers=headers)
print(r.json())
print(r.status_code)
print(r.text)

5、传递参数json与data格式的区别?

     data:字典对象

     json:json字符串

6、如何将字典对象转换为json字符串?
    1.导入json包

    2.json.dumps(字典对象)

7、响应数据json()与text区别?

    json():双引号,返回类型字典,可以通过键名来获取响应的值

    text:单引号,返回的类型为字符串,无法通过键名俩获取响应的值  

8、DELETE方法(响应状态码:204)

import requests
url="http://127.0.0.1:8080/demo/cheliangxinxi/remove/190/"
r=requests.delete(url)

print(r.status_code)

六、响应对象的方法

1.encoding

查看默认请求编码格式:响应对象.encoding

设置响应编码格式      响应对象.encoding=”utf-8”

2.headers 获取服务器响应信息头

响应对象.headers

3.cookies获取响应cokkies信息(服务器产生)

4.text:以文本形式解析

5.content:以字节码形式解析响应内容

6.json() 以json字符串格式解析响应内容

七、案例:

TPShop商城的获取验证码,登陆成功,获取订单信息

import requests
import json
#获取验证码
url="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=verify"
r=requests.get(url)

#获取cookie
r_cookie=r.cookies
print(r_cookie)
print("单独获取cookie值:",r_cookie['PHPSESSID'])

#设置cookie变量
cookies={"PHPSESSID":r_cookie['PHPSESSID']}

url_login="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=do_login"
data={
    "username": "15991986680",
    "password": "Wxm131411",
    "region": "8888"
}
r_login=requests.post(url=url_login,json=data,cookies=cookies)
print(r_login.json())
#获取订单信息
url_order="http://demo6.tp-shop.cn/index.php/Home/Order/order_list.html"
r=requests.get(url=url_order,cookies=cookies)
print(r.text)

Session:完成一次会话(从客户端和服务器创建请求连接开始,到客户端和服务器断开连接结束)

session可以自动保存服务器产生的cookies信息,并且自动在下一条请求时附加。

应用:通过session对象.方法

session.get()

session.post()

session.put()

session.delete()

无论是requests还是session返回结果都是responsebody

八、TPShop案例session版本

import requests
import json
#获取验证码
url="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=verify"
r=requests.get(url)

#获取cookie
r_cookie=r.cookies
print(r_cookie)
print("单独获取cookie值:",r_cookie['PHPSESSID'])

#设置cookie变量
cookies={"PHPSESSID":r_cookie['PHPSESSID']}

url_login="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=do_login"
data={
    "username": "15991986680",
    "password": "Wxm131411",
    "region": "8888"
}
session=requests.session()
r_login=session.post(url=url_login,json=data)
print(r_login.json())
#获取订单信息
url_order="http://demo6.tp-shop.cn/index.php/Home/Order/order_list.html"
r=session.get(url=url_order)
print(r.text)

九、unittest与requests结合

   继承unittest.TestCase,以test开头的方法就是一条用例

setup:

 作用:test开始方法执行之前,首先会被执行

teardown:

 作用:test开始方法执行之后,会被执行

test_login_success:

 作用:登陆成功

test_username_not_exist

 作用:登陆失败,用户名不存在

test_password_error

 作用:登陆失败,密码错误

import unittest
import requests
class TPShopLogin(unittest.TestCase):
    def setUp(self):
        #获取session对象
        self.session=requests.session()
        #登陆url
        self.url_login="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=do_login"
        #验证码url
        self.url_verify="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=verify"

    def tearDown(self):
        self.session.close()
        #关闭session

    def test_login_sucess(self):
        #请求验证码
        self.session.get(self.url_verify)
        data = {
            "username": "15991986680",
            "password": "Wxm131411",
            "region": "8888"
        }
        #请求登陆
        r=self.session.post(self.url_login,json=data)
        #断言
        try:
          self.assertEqual("登陆成功",r.json()['msg'])
        except AssertionError as e:
          print(e)
    def test_username_not_exist(self):
        # 请求验证码
        self.session.get(self.url_verify)
        data = {
            "username": "159919866801",
            "password": "Wxm131411",
            "region": "8888"
        }
        # 请求登陆
        r = self.session.post(self.url_login, json=data)
        # 断言
        try:
            self.assertEqual("用户名不存在", r.json()['msg'])
        except AssertionError as e:
            print(e)
    def test_password_error(self):
        # 请求验证码
        self.session.get(self.url_verify)
        data = {
            "username": "15991986680",
            "password": "Wxm13141111",
            "region": "8888"
        }
        # 请求登陆
        r = self.session.post(self.url_login, json=data)
        # 断言
        try:
            self.assertEqual("密码错误", r.json()['msg'])
        except AssertionError as e:
            print(e)

    def test_verify_error(self):
        # 请求验证码
        self.session.get(self.url_verify)
        data = {
            "username": "15991986680",
            "password": "Wxm13141111",
            "region": "8888"
        }
        # 请求登陆
        r = self.session.post(self.url_login, json=data)
        # 断言
        try:
            self.assertEqual("验证码错误", r.json()['msg'])
        except AssertionError as e:
            print(e)

if __name__=='__main__':
    unittest.main()

你可能感兴趣的:(测试类,#,自动化测试,ab测试)