zoukankan      html  css  js  c++  java
  • 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:pythonunittestForDjango>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:pythonunittestForDjango>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)
  • 相关阅读:
    ViZDoom深度预测(Depth Prediction)
    刨根问底U3D---从Profile中窥探Unity的内存管理
    关于Android真机调测Profiler
    初探Stage3D(三) 深入研究透视投影矩阵
    初探Stage3D(二) 了解AGAL
    初探Stage3D(一) 3D渲染基础原理
    unity3d优化总结篇
    Unity数据存储路径总结
    CREATE A ENERGY / HEALTH BAR HUD
    CREATE A LOADING SCENE / SPLASH SCREEN
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/11706244.html
Copyright © 2011-2022 走看看