1. 程式人生 > >python自動化測試三部曲之request+django實現介面測試

python自動化測試三部曲之request+django實現介面測試

國慶期間準備寫三篇部落格,介紹和總結下介面測試,由於國慶期間帶娃,沒有按照計劃完成,今天才完成第二篇,慚愧慚愧。

這裡我第一篇部落格的地址:https://www.cnblogs.com/bainianminguo/p/11616526.html,主要是介紹unittest框架,有興趣的同學們可以移步去查閱

 

這裡廢話少說,進入正題

我的思路是這樣的

1、先用django實現登陸、增加、刪除、檢視4個介面

2、在excel定義好測試案例、然後讀取excel中的案例,然後把案例用unittest框架組裝和封裝

3、啟動django,執行測試案例

 

一、先跑通unittest到django的流程

1、先建立一個Django的專案

 

 

 

2、建立路由,這裡我們使用二級路由

a、先複製工程目錄下的urls.py檔案到app目錄下

 

 

 

b、修改工程目錄下的urls.py檔案,定義一級路由

 

 

 

c、修改app目錄下的urls.py檔案,設定二級路由,這裡切記務必要刪除預設的admin這條路由

 

 

 

d、定義這條路由指向的檢視的函式

 

 

 

e、啟動django,這裡我們使用9090埠啟動,因為我們的Jenkins埠用的是8080

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

 

f、這裡的是啟動成功的樣式,我圈住的告警可以忽略,因為這裡Django的admin需要的,我們這裡不會用到django的admin

 

 

 

g、開啟瀏覽器訪問django,我們的一個簡單的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中寫好介面測試案例

 

 

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)

&n