python自动化测试三部曲之request+django实现接口测试


Posted in Python onOctober 07, 2020

国庆期间准备写三篇博客,介绍和总结下接口测试,由于国庆期间带娃,没有按照计划完成,今天才完成第二篇,惭愧惭愧。

这里我第一篇博客的地址:https://3water.com/article/197004.htm,主要是介绍unittest框架,有兴趣的同学们可以移步去查阅

这里废话少说,进入正题

我的思路是这样的

1、先用django实现登陆、增加、删除、查看4个接口

2、在excel定义好测试案例、然后读取excel中的案例,然后把案例用unittest框架组装和封装

3、启动django,执行测试案例

一、先跑通unittest到django的流程

1、先创建一个Django的项目

python自动化测试三部曲之request+django实现接口测试

2、创建路由,这里我们使用二级路由

a、先复制工程目录下的urls.py文件到app目录下

python自动化测试三部曲之request+django实现接口测试

b、修改工程目录下的urls.py文件,定义一级路由

python自动化测试三部曲之request+django实现接口测试

c、修改app目录下的urls.py文件,设置二级路由,这里切记务必要删除默认的admin这条路由

python自动化测试三部曲之request+django实现接口测试

d、定义这条路由指向的视图的函数

python自动化测试三部曲之request+django实现接口测试

e、启动django,这里我们使用9090端口启动,因为我们的Jenkins端口用的是8080

E:\python\unittestForDjango>python manage.py runserver 9090

f、这里的是启动成功的样式,我圈住的告警可以忽略,因为这里Django的admin需要的,我们这里不会用到django的admin

python自动化测试三部曲之request+django实现接口测试

g、打开浏览器访问django,我们的一个简单的Django项目已经跑通

python自动化测试三部曲之request+django实现接口测试

3、在视图函数中定义一个方法,这个方法分别处理GET请求和POST请求

a、定义视图函数

这里通过这个参数告诉浏览器,我们返回的是JSON数据

return HttpResponse(result, content_type="application/json;charset=utf-8")
def test_login(request):
  method = request.method.upper()
  if method == "GET":
    result = {}
    name = request.GET.get("username",None)
    pwd = request.GET.get("pwd",None)
    result["name"] = name
    result["pwd"] = pwd
    result = json.dumps(result)
    # return HttpResponse(result)
    return HttpResponse(result, content_type="application/json;charset=utf-8")

  else:
    result = {}
    name = request.POST.get("username",None)
    pwd = request.POST.get("pwd",None)
    result["name"] = name
    result["pwd"] = pwd
    result = json.dumps(result)
    return HttpResponse(result,content_type="application/json;charset=utf-8")

b、使用request模块发起POST和GET请求

#Auther Bob
#--*--conding:utf-8 --*--
import requests
import json


class TestCase(object):
  def __init__(self,username,pwd,url):
    self.username = username
    self.pwd = pwd
    self.url = url


  def get(self):
    # 发送get请求
    url = self.url + "?username=" + str(self.username) + "&" + "pwd=" + str(self.pwd)
    res = requests.get(url=url)
    print(res.text,type(res.text))

  def post(self):
    # 发送post请求
    data = {
      "username" : self.username,
      "pwd" : self.pwd
    }
    res = requests.post(url=self.url,data=data)
    print(res.text)


if __name__ == '__main__':
  url = "http://127.0.0.1:9090/web/login/"
  username = "zhangsan"
  pwd = "123"

  t = TestCase(username,pwd,url)

  t.get()
  t.post()

c、这里我们引入unittest框架,测试案例可以这么写

import unittest
from test3 import test_request
class TestDjango(unittest.TestCase):
 

  def setUp(self):
    print("unittest框架的前置条件")

  def tearDown(self):
    print("unittest框架的后置条件")

  def test_01(self):
    url = "http://127.0.0.1:9090/web/login/"
    username = "zhangsan"
    pwd = "123"
    t = test_request.TestCase(url=url,username=username,pwd=pwd)
  def test_02(self):
    url = "http://127.0.0.1:9090/web/login/"
    username = "zhangsan"
    pwd = "123"
    t = test_request.TestCase(url=url,username=username,pwd=pwd)
    t.post()


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

d、这里有重复代码,我们可以利用unittest框架中的classmethod来解决,因为实例化一个测试类可以放在前置条件中

import unittest
from test3 import test_request
class TestDjango(unittest.TestCase):
  @classmethod
  def setUpClass(cls):
    url = "http://127.0.0.1:9090/web/login/"
    username = "zhangsan"
    pwd = "123"
    # 这里的t虽然是类变量,但是python的中的实例是可以用引用类变量的
    cls.t = test_request.TestCase(url=url,username=username,pwd=pwd)

  def setUp(self):
    print("unittest框架的前置条件")

  def tearDown(self):
    print("unittest框架的后置条件")

  def test_01(self):
    self.t.get()
  def test_02(self):
    self.t.post()

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

e、在testcase中加入断言

import unittest
from test3 import test_request
class TestDjango(unittest.TestCase):
  @classmethod
  def setUpClass(cls):
    url = "http://127.0.0.1:9090/web/login/"
    username = "zhangsan"
    pwd = "123"
    # 这里的t虽然是类变量,但是python的中的实例是可以用引用类变量的
    cls.t = test_request.TestCase(url=url,username=username,pwd=pwd)

  def setUp(self):
    print("unittest框架的前置条件")

  def tearDown(self):
    print("unittest框架的后置条件")

  def test_01(self):
    res = self.t.get()
    self.assertEqual(200,res.status_code)
  def test_02(self):
    res = self.t.post()
    self.assertEqual(200, res.status_code)

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

f、引入testsuite

import unittest
from unittest import TestLoader

from test3 import test_unittest


if __name__ == '__main__':
  suite = unittest.TestSuite()
  loader = TestLoader()
  test_cases1 = unittest.TestLoader().loadTestsFromModule(test_unittest)
  # 参数是一个模块,会把这个模块里的所有case加载进来
  suite.addTests(test_cases1)
  runner = unittest.TextTestRunner(verbosity=2)
  runner.run(suite)

二、在django中设计接口

这里我们写一个简单的例子,设计一个用户表,设计4个接口

接口1:登陆

接口2:增加用户,需要用户登陆

接口3:删除用户,需要用户登陆

接口4:查询用户,不需要用户登陆

1、先看登陆接口

a、登录接口对应的url

下面是一级路由

url(r'^web/', include('unittesstApp1.urls'))

下面是二级路由

url(r'^login/', views.test_login),

b、登录接口的视图函数

def test_login(request):
  method = request.method.upper()
  if method == "GET":
    returndict = {"code": 200, "error": None}
    username = request.GET.get("username",None)
    password = request.GET.get("password",None)
    if username == "admin" and password == "admin123.":
      request.session["username"] = username
      request.session["password"] = password
      result = json.dumps(returndict)
    else:
      returndict["code"] = 201
      returndict["error"] = "用户名或者密码错误"
      result = json.dumps(returndict)
    return HttpResponse(result,content_type="application/json;charset=utf-8")

这里我们用到了session来代替cookies

2、增加用户接口

a、增加用户对应的url

一级路由同登陆接口,下面是二级路由

url(r'^add/', views.test_add),

b、增加用户接口对应的视图函数,这里我们做了各种异常处理,且判断了用户是否登陆,也就是通过是否携带cookies来判断

def test_add(request):
  method = request.method.upper()
  if method == "POST":
    returndict = {"code": 200, "error": None}
    username = request.session.get("username",None)
    password = request.session.get("password",None)

    if username == "admin" and password == "admin123.":
      newusername = request.POST.get("username",None)
      age = request.POST.get("age",None)
      sex = request.POST.get("sex",None)
      pwd = request.POST.get("pwd",None)
      userinfo = [newusername,age,sex,pwd]
      print(userinfo)
      if not "None" in userinfo and all(userinfo):
        if models.userInfo.objects.filter(username = userinfo[0]).exists():
          returndict["error"] = "{username} is exists,please add a new username".format(username = username)
          returndict["code"] = 201
          result = json.dumps(returndict)
          return HttpResponse(result, content_type="application/json;charset=utf-8")
        else:
          models.userInfo.objects.create(
            username = newusername,
            age = age,
            sex = sex,
            pwd = pwd
          )
          if models.userInfo.objects.filter(username=userinfo[0]).exists():
            result = json.dumps(returndict)
            return HttpResponse(result, content_type="application/json;charset=utf-8")
          else:
            returndict["error"] = "{username} is error,please retry add".format(username=username)
            returndict["code"] = 201
            result = json.dumps(returndict)
            return HttpResponse(result, content_type="application/json;charset=utf-8")
      else:
        returndict["error"] = "must input username,age,sex,pwd"
        returndict["code"] = 201
        result = json.dumps(returndict)
        return HttpResponse(result, content_type="application/json;charset=utf-8")
    else:
      returndict = {"code": 201, "error": "用户名或者密码错误"}
      result = json.dumps(returndict)
      return HttpResponse(result, content_type="application/json;charset=utf-8")

3、删除接口

a、删除用户对应的url

一级路由同登陆接口,这里只看二级路由

url(r'^del/', views.del_user),

b、删除接口对应的视图函数,这里我做了各种异常处理,也做了用户是否登陆的检测,也是通过检测cookies来实现

def del_user(request):
  method = request.method.upper()
  if method == "POST":
    returndict = {"code": 200, "error": None}
    username = request.session.get("username",None)
    password = request.session.get("password",None)
    if username == "admin" and password == "admin123.":
      delusername = request.POST.get("username",None)
      print(delusername)
      if delusername != None:
        if models.userInfo.objects.filter(username=delusername).exists():
          delid = models.userInfo.objects.get(username=delusername).id
          print(delid)
          try:
            models.userInfo.objects.get(id=delid).delete()
          except Exception as e:
            returndict = {"code": 201, "error": e}
            result = json.dumps(returndict)
            return HttpResponse(result, content_type="application/json;charset=utf-8")
          else:
            result = json.dumps(returndict)
            return HttpResponse(result, content_type="application/json;charset=utf-8")
        else:
          returndict = {"code": 201, "error": "{username} is not exists".format(username = delusername)}
          result = json.dumps(returndict)
          return HttpResponse(result, content_type="application/json;charset=utf-8")
      else:
        returndict = {"code": 201, "error": "you must input a username"}
        result = json.dumps(returndict)
        return HttpResponse(result, content_type="application/json;charset=utf-8")

    else:
      returndict = {"code": 201, "error": "username or password is error"}
      result = json.dumps(returndict)
      return HttpResponse(result, content_type="application/json;charset=utf-8")

4、查看接口

a、查看接口对应的url

一级路由同登陆接口url,下面是二级路由

url(r'^scan/', views.get_user),

b、查看接口对应的url,这里我们不检测用户是否登陆,直接把查到的数据返回给客户,如果查询报错,才返回错误的信息

def get_user(request):
  method = request.method.upper()
  returndict = {"code": 200, "userinfo": None}
  if method == "GET":
    try:
      alluser = models.userInfo.objects.all().values_list("username")
      alluserlist = []
      for i in alluser:
        alluserlist.append(i)
        
      returndict["userinfo"] = alluserlist

    except Exception as e:
      returndict["code"] = "201"
      returndict["error"] = e
    finally:
      result = json.dumps(returndict)
      return HttpResponse(result, content_type="application/json;charset=utf-8")

5、设计删除数据库中所有的接口,用来做后置条件

def del_alluser(request):
  method = request.method.upper()
  if method == "POST":
    returndict = {"code": 200, "error": None}
    username = request.session.get("username", None)
    password = request.session.get("password", None)
    if username == "admin" and password == "admin123.":
      if models.userInfo.objects.all().count() > 0:
        models.userInfo.objects.all().delete()
      result = json.dumps(returndict)
      return HttpResponse(result, content_type="application/json;charset=utf-8")

三、案例准备

1、在excel中写好接口测试案例

python自动化测试三部曲之request+django实现接口测试

2、定义常量,也就是每列对应的值

class TestConfig(object):
  def __init__(self):
    self.name = 0
    self.url = 1
    self.method = 2
    self.cookies = 3
    self.data = 4
    self.res = 5
    self.exec = 6

  def getname(self):
    return self.name

  def geturl(self):
    return self.url

  def getmethod(self):
    return self.method

  def getcookies(self):
    return self.cookies

  def getdata(self):
    return self.data

  def getres(self):
    return self.res

  def getexec(self):
    return self.exec

3、定义读取excel的类,因为我要从excel中读取案例

import xlrd
import os

class testexcel(object):
  casepath = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "case", "testcase.xlsx")

  def __init__(self):
    self.casepath = testexcel.casepath
    self.execlobj = xlrd.open_workbook(self.casepath)
    self.sheetobj = self.execlobj.sheet_by_index(0)


  def get_excel_data(self,row,col):
    max_row = self.get_excel_max_row()
    max_col = self.get_excel_max_col()
    if row > max_row -1 or col > max_col - 1:
      return False
    else:
      data = self.sheetobj.cell_value(row,col)
      return data


  def get_excel_max_row(self):
    r_num = self.sheetobj.nrows
    return r_num


  def get_excel_max_col(self):
    c_num = self.sheetobj.ncols
    return c_num

4、定义我们的接口函数

import requests
import json


class TestLogin(object):
  def __init__(self,username,pwd,url):
    self.username = username
    self.pwd = pwd
    self.url = url

  def get(self):
    # 发送get请求
    url = self.url + "?username=" + str(self.username) + "&" + "password=" + str(self.pwd)
    res = requests.get(url=url,
              headers={
           "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
         })
    # print(json.loads(res.text))
    return res

  def post(self):
    # 发送post请求
    data = {
      "username" : self.username,
      "pwd" : self.pwd
    }
    res = requests.post(url=self.url,
              data=data,
              headers={
                "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
              },
              )
    # print(res.text)
    return res


class TestAdd(object):
  def __init__(self,username,age,sex,pwd,cookies,url):
    self.username = username
    self.age = age
    self.sex = sex
    self.pwd = pwd
    self.url = url
    self.cookies = cookies
  def post(self):
    # 发送post请求
    data = {
      "username" : self.username,
      "pwd" : self.pwd,
      "age" : self.age,
      "sex" : self.sex
    }
    res = requests.post(url=self.url,
              data=data,
              headers={
                "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
              },
              cookies=self.cookies,
              )
    # print(res.text)
    return res


class Testdel(object):
  def __init__(self, username,cookies,url):
    self.username = username
    self.cookies = cookies
    self.url = url

  def post(self):
    # 发送post请求
    data = {
      "username": self.username,
    }
    res = requests.post(url=self.url,
              data=data,
              headers={
                "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
              },
              cookies=self.cookies,
              )
    # print(res.text)
    return res


class Testscan(object):
  def __init__(self,url):
    self.url = url
  def get(self):
    res = requests.get(url=self.url,
              headers={
                "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
              },
              cookies=None,
              )
    return res

5、定义测试案例

import unittest
from test3 import test_request
import json
from util import test_json
from util import test_excel
from case import testconfig
import requests

class TestDjango(unittest.TestCase):
  @classmethod
  def setUpClass(cls):
    cls.alldata = test_json.testjson()

  @classmethod
  def tearDownClass(cls):
    url = "http://127.0.0.1:9090/web/login/" + "?username=" + "admin" + "&" + "password=" + "admin123."
    res = requests.get(url=url,
              headers={
           "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
         })
    url = "http://127.0.0.1:9090/web/delall/"
    requests.post(url=url,
           headers={
             "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
           },
           cookies = res.cookies
           )


  def get_cookies(self):
    url = "http://127.0.0.1:9090/web/login/" + "?username=" + "admin" + "&" + "password=" + "admin123."
    res = requests.get(url=url,
              headers={
           "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
         })
    # print(json.loads(res.text))
    return res.cookies

  @unittest.skip('noexec')
  def test_login_ok(self):
    row = 1
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row,configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      data = json.loads(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "GET":
        testobj = test_request.TestLogin(data["username"],data["pwd"],url)
        resobj = testobj.get()
        self.assertEqual(int(res),json.loads(resobj.text)["code"])

  @unittest.skip('noexec')
  def test_login_pwd_error(self):
    row = 2
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row,configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      data = json.loads(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "GET":
        testobj = test_request.TestLogin(data["username"],data["pwd"],url)
        resobj = testobj.get()
        self.assertEqual(int(res),json.loads(resobj.text)["code"])

  @unittest.skip('noexec')
  def test_login_user_error(self):
    row = 3
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row,configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      data = json.loads(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "GET":
        testobj = test_request.TestLogin(data["username"],data["pwd"],url)
        resobj = testobj.get()
        self.assertEqual(int(res),json.loads(resobj.text)["code"])

  @unittest.skip('noexec')
  def test_user_pwd_error(self):
    row = 4
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row,configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      data = json.loads(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "GET":
        testobj = test_request.TestLogin(data["username"],data["pwd"],url)
        resobj = testobj.get()
        self.assertEqual(int(res),json.loads(resobj.text)["code"])

  @unittest.skip('noexec')
  def test_insert_ok(self):
    row = 5
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      data = json.loads(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.TestAdd(data["username"], data["age"],data["sex"], data["pwd"],cookies,url)
        resobj = testobj.post()
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])

  @unittest.skip('noexec')
  def test_insert_nologin(self):
    row = 6
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      data = json.loads(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.TestAdd(data["username"], data["age"],data["sex"], data["pwd"],cookies,url)
        resobj = testobj.post()
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])

  @unittest.skip("noexec")
  def test_insert_user_error(self):
    row = 7
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      data = json.loads(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.TestAdd(data.get("username",None), data.get("age",None), data.get("sex",None), data.get("pwd",None), cookies, url)
        resobj = testobj.post()
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])

  @unittest.skip('no exec')
  def test_insert_pwd_error(self):
    row = 8
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      data = json.loads(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.TestAdd(data.get("username",None), data.get("age",None), data.get("sex",None), data.get("pwd",None), cookies, url)
        resobj = testobj.post()
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])

  @unittest.skip("no exec")
  def test_insert_sex_error(self):
    row = 9
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      print(data)
      data = json.loads(data)
      print(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.TestAdd(data.get("username",None), data.get("age",None), data.get("sex",None), data.get("pwd",None), cookies, url)
        resobj = testobj.post()
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])

  @unittest.skip('no exec')
  def test_insert_age_error(self):
    row = 10
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      print(data)
      data = json.loads(data)
      print(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.TestAdd(data.get("username",None), data.get("age",None), data.get("sex",None), data.get("pwd",None), cookies, url)
        resobj = testobj.post()
        print(resobj.text)
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])

  @unittest.skip('no exec')
  def test_insert_user_exist(self):
    row = 11
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      print(data)
      data = json.loads(data)
      print(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.TestAdd(data.get("username", None), data.get("age", None), data.get("sex", None),
                        data.get("pwd", None), cookies, url)
        resobj = testobj.post()
        print(resobj.text)
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])

  def test_get_user(self):
    row = 12
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None

      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.Testscan(url)
        resobj = testobj.get()
        # print(resobj.text
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])

  @unittest.skip('no exec')
  def test_del_user(self):
    row = 13
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      print(data)
      data = json.loads(data)
      print(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.Testdel(data.get("username", None),cookies, url)
        resobj = testobj.post()
        print(resobj.text)
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])


  def test_del_noexistuser(self):
    row = 14
    configobj = testconfig.TestConfig()
    excelobj = test_excel.testexcel()
    execstatus = excelobj.get_excel_data(row, configobj.getexec())
    if execstatus == "YES":
      cookiesstatus = excelobj.get_excel_data(row, configobj.getcookies())
      if cookiesstatus == "YES":
        cookies = self.get_cookies()
      else:
        cookies = None
      data = excelobj.get_excel_data(row, configobj.getdata())
      print(data)
      data = json.loads(data)
      print(data)
      url = excelobj.get_excel_data(row, configobj.geturl())
      res = excelobj.get_excel_data(row, configobj.getres())
      method = excelobj.get_excel_data(row, configobj.getmethod())
      if method == "POST":
        testobj = test_request.Testdel(data.get("username", None),cookies, url)
        resobj = testobj.post()
        print(resobj.text)
        print(json.loads(resobj.text))
        self.assertEqual(int(res), json.loads(resobj.text)["code"])

6、引入unittest的suit,组织案例

import unittest
from unittest import TestLoader

from test3 import test_unittest


if __name__ == '__main__':
  suite = unittest.TestSuite()
  loader = TestLoader()
  test_cases1 = unittest.TestLoader().loadTestsFromModule(test_unittest)
  # 参数是一个模块,会把这个模块里的所有case加载进来
  suite.addTests(test_cases1)
  runner = unittest.TextTestRunner(verbosity=2)
  runner.run(suite)

四、执行案例

1、启动django

E:\python\unittestForDjango>python manage.py runserver 9090
Performing system checks...

System check identified no issues (0 silenced).
October 19, 2019 - 22:46:42
Django version 1.11.7, using settings 'unittestForDjango.settings'
Starting development server at http://127.0.0.1:9090/
Quit the server with CTRL-BREAK

2、执行测试套件

test_del_noexistuser (test3.test_unittest.TestDjango) ... {"username":"test1"}
{'username': 'test1'}
ok
test_del_user (test3.test_unittest.TestDjango) ... skipped 'no exec'
test_get_user (test3.test_unittest.TestDjango) ... {"code": 201, "error": "test1 is not exists"}
{'code': 201, 'error': 'test1 is not exists'}
{'code': 200, 'userinfo': []}
ok
test_insert_age_error (test3.test_unittest.TestDjango) ... skipped 'no exec'
test_insert_nologin (test3.test_unittest.TestDjango) ... skipped 'noexec'
test_insert_ok (test3.test_unittest.TestDjango) ... skipped 'noexec'
test_insert_pwd_error (test3.test_unittest.TestDjango) ... skipped 'no exec'
test_insert_sex_error (test3.test_unittest.TestDjango) ... skipped 'no exec'
test_insert_user_error (test3.test_unittest.TestDjango) ... skipped 'noexec'
test_insert_user_exist (test3.test_unittest.TestDjango) ... skipped 'no exec'
test_login_ok (test3.test_unittest.TestDjango) ... skipped 'noexec'
test_login_pwd_error (test3.test_unittest.TestDjango) ... skipped 'noexec'
test_login_user_error (test3.test_unittest.TestDjango) ... skipped 'noexec'
test_user_pwd_error (test3.test_unittest.TestDjango) ... skipped 'noexec'

----------------------------------------------------------------------
Ran 14 tests in 1.466s

OK (skipped=12)

到此这篇关于python自动化测试三部曲之request+django实现接口测试的文章就介绍到这了,更多相关request django 接口测试内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
python实现名片管理系统项目
Apr 26 Python
Python read函数按字节(字符)读取文件的实现
Jul 03 Python
python的pstuil模块使用方法总结
Jul 26 Python
pandas DataFrame行或列的删除方法的实现示例
Aug 02 Python
python 协程 gevent原理与用法分析
Nov 22 Python
Restful_framework视图组件代码实例解析
Nov 17 Python
python删除csv文件的行列
Apr 06 Python
Django框架中模型的用法
Jun 10 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 #Python
浅谈anaconda python 版本对应关系
Oct 07 #Python
简述python&pytorch 随机种子的实现
Oct 07 #Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 #Python
python单元测试框架pytest的使用示例
Oct 07 #Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 #Python
Python colormap库的安装和使用详情
Oct 06 #Python
You might like
php实现用于计算执行时间的类实例
2015/04/18 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
python getpass模块用法及实例详解
2019/10/07 Python
python中pyqtgraph知识点总结
2021/01/26 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
自荐信格式范文
2013/10/07 职场文书
大学生专科学习生活的自我评价
2013/12/07 职场文书
小学生红领巾广播稿
2014/01/21 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
酒店节能减排方案
2014/05/26 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL
python实现学员管理系统(面向对象版)
2022/06/05 Python
Linux安装Docker详细教程
2022/07/07 Servers