python+untitest+request实现接口自动化测试

python+untitest+request实现接口自动化测试

目录结构

  1. report
  2. test_case
  3. run_test_case.py

实现步骤描述

  1. 在test_case中,使用untitest把每个接口写成测试脚本,每个接口写一个测试脚本,但是包含多个测试用例(用例名称以test开头)
  2. 使用discover()方法,自动匹配查找测试用例,将所有测试用例组装到测试套件中,然后通过run执行discover
  3. 使用HTMLTestRunner生成测试报告

post接口

#coding:utf-8
import urllib

import requests
import json
import unittest
from login import get_login

class post_request(unittest.TestCase):
    u'''01:正常登录 02:密码错误 03:登录账号密码错误'''

    def setUp(self):
        self.post_url = ''
        self.header = {"Accept": 
                       "Accept - Encoding": 
                       "Content-Type": 
                       "Cookie": 
        }

    def test_post_01(self):
        u'''注释不显示'''
       # u'''登录测试-正向,账号:wangm/密码:1234567'''
        url = self.post_url
        header = self.header
        #data = {"userName": "wangm", "passWord":"1234567"}
        data = {"username" : "wangm",
                "password" : 1234567,
                "token":get_login()}
        #将data序列化为json格式数据,传递给data参数
        r = requests.post(url,data=data , headers = header)
        print(r.status_code)
        print(r.text)

        #result = r.json()['code']#获取状态码
        #print(result)

        #断言
        #self.assertEqual(200,result)
        self.assertIn('message',r.text)
        #self.assertTrue('success' in r.text)

    def test_post_02(self):
        u'''登陆测试-密码错误,账号:wangm/密码L23'''
        url = self.post_url
        header = self.header
        data = {"username": "wangm",
                "password": 123,
                "token":get_login()}
        r = requests.post(url,data=data, headers = header)
        print(r.status_code)
        print(r.text)

    def test_post_03(self):
        u'''登陆测试-密码错误,账号:wangm/密码L23'''
        url = self.post_url
        header = self.header
        data = {"username": "wang",
                "password": 123,
                "token":get_login()}
        r = requests.post(url,data=data, headers = header)
        print(r.status_code)
        print(r.text)



    def tearDown(self):
        pass

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

#data=json.dumps(data)

get接口

#coding:utf-8
import requests
import unittest
from login import get_login

class get_request(unittest.TestCase):

    def setUp(self):
        self.get_url = " "
        self.header = {
            "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
            "x-token": get_login()
        }
    def test_get_01(self):
        u'''描述'''
        url = self.get_url
        header = self.header
        data ={"page":1,
               "size":12,
               "keyword":"",
               "token":get_login()
               }
        r = requests.get(url,data=data,headers=header)
        print( r.text)
    def tearDown(self):
        pass

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

接口间token调用

import requests
import json

def get_login():
      url = ""
      data = {
           "username" :"wangm",
           "password" :"1234567"
      }
      headers = {
            "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
      }

      res = requests.post(url=url,data=data,headers=headers)
      return (res.json()["data"]["token"])

token  = str(get_login())
#print(token,"确认token成功返回")
print(token)


#从响应结果中获取token值


下载

#coding:utf-8
#只要fidder开着,涉及SSL安全验证问题,运行失败,关闭fidder后,运行成功
import requests
import unittest
from login import get_login

class get_request(unittest.TestCase):

    def setUp(self):
        self.get_url = ''
        self.header = {
            "Cookie":
            "Accept":
            "Connection":
            "Accept-Language":
            "token":get_login()
        }

    def test_get_01(self):
        url = self.get_url
        header = self.header
        #data = {
        #}
        r = requests.get(url=url,headers=header)
        #print(r.text)
        #open打开excel文件,保存为后缀为xls的文件
        fp = open("vehicleModel.xlsx","wb")  #"w":写入  "b":二进制
        fp.write(r.content)
        fp.close()
        #print()


    def tearDown(self):
        pass

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

上传

#coding:utf-8
import requests
import unittest
from login import get_login

class post_request(unittest.TestCase):

    def setUp(self):
        self.url = ''
        self.header = {
            #"Cookie": 
            "x - token": 
            "Content - Type": 
        }

    def test_post_01(self):
         url = self.url
         headers = self.header
         data = {
             "Content - Disposition": "form - data",
             "name": "file",
             "filename": "vehicleModel.xlsx",
             "Content - Type": "application / vnd.openxmlformats - officedocument.spreadsheetml.sheet",
             "token": get_login(),
         }
         files = {"file": ("vehicleModel.xlsx", open("C:\\Users\\Kst\\Desktop\\vehicleModel.xlsx", "rb"), "text/plain", {}),
         #cookies=get_login()
         }

         r = requests.post(url=url,headers=headers,data=data,files=files)

         print(r.status_code)
         print(r.text)

    def tearDown(self):
        pass

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

HTMLTestRunner

将HTMLTestRunner.py文件放入Lib下,不同的HTMLTestRunner会产生不同样式的测试报告
在这里插入图片描述

run

# coding=utf-8
#https://www.jb51.net/article/151626.htm
#不发送邮件
import unittest
import HTMLTestRunner
import time
# 相对路径
test_dir ='./test_case'
test_dir1 ='./report'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
# 定义带有当前测试时间的报告,防止前一次报告被覆盖
now = time.strftime("%Y-%m-%d %H_%M_%S")
filename = test_dir1 + '/' + now + 'result.html'
# 二进制打开,准备写入文件



fp = open(filename, 'wb')
# 定义测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'接口自动化测试报告', description=u'环境:Windows 10 浏览器:chrome 执行人:汪敏 用例执行情况')
runner.run(discover)#discover加载测试用例

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪敏wangmin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值