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 文件操作实现代码
Oct 07 Python
python下函数参数的传递(参数带星号的说明)
Sep 19 Python
从零学python系列之从文件读取和保存数据
May 23 Python
在Python中使用dict和set方法的教程
Apr 27 Python
python自定义类并使用的方法
May 07 Python
python中enumerate函数用法实例分析
May 20 Python
python numpy格式化打印的实例
May 14 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 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新手上路(十一)
2006/10/09 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
PDO::_construct讲解
2019/01/27 PHP
JavaScript 密码强度判断代码
2009/09/05 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
JavaScript字符串对象
2017/01/14 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
Python入门篇之文件
2014/10/20 Python
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
详解Python文件修改的两种方式
2019/08/22 Python
Django choices下拉列表绑定实例
2020/03/13 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
python3 re返回形式总结
2020/11/20 Python
python代码实现图书管理系统
2020/11/30 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
八年级物理教学反思
2014/01/19 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
2015新学期开学寄语
2015/02/26 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android