基于Django的电子商务网站开发(连载17)

简介: 基于Django的电子商务网站开发(连载17)

接下来再对测试程序以及配置文件进行优化,把loginConfig.xmlregisterConfig.xml这两个文件进行合并,形成loginRegConfig.xml

<? xml  version="1.0" encoding="UTF-8"?>
<node>
         <case>
                   <login>0</login><!---  0表示执行不需要登录、1表示需要登录 -->
         </case>
         <!--- 注册的时候,用户名已经存在 -->     
         <case>
                   <TestId>loginReg-testcase001</TestId>
                   <Title>用户注册</Title>
                   <Method>post</Method>
                   <Desc>注册的时候,用户名已经存在</Desc>
                   <Url>http://127.0.0.1:8000/register/</Url>
                  <InptArg>{"username":"Johnson","password":"000000","email":"Johnson5@126.com"}</InptArg><!---  用户名同initInfo.xml中用户信息 -->
                   <Result>200</Result>
                   <CheckWord>用户名已经存在!</CheckWord>
         </case>
         <!--- 注册成功 -->
         <case>
                   <TestId>loginReg-testcase002</TestId>
                   <Title>用户注册</Title>
                   <Method>post</Method>
                   <Desc>注册用户名不存在</Desc><!--- 通过“注册用户名不存在”测试完毕删除数据库记录 -->
                   <Url>http://127.0.0.1:8000/register/</Url>
                   <InptArg>{"username":"smith","password":"000000","email":"smith@126.com"}</InptArg><!---  用户名不同于initInfo.xml中用户信息 -->
                   <Result>200</Result>
                   <CheckWord>登录</CheckWord>
         </case>
         <!--- 登录操作,正确用户名,错误密码 -->
         <case>
                   <TestId>loginReg-testcase003</TestId>
                   <Title>用户登录</Title>
                   <Method>post</Method>
                   <Desc>正确用户名,错误密码</Desc>
                   <Url>http://127.0.0.1:8000/login_action/</Url>
                   <InptArg>{"username":"Johnson","password":"123456"}</InptArg><!---  密码不同于initInfo.xml中用户信息 -->
                   <Result>200</Result>
                   <CheckWord>用户名或者密码错误</CheckWord>
         </case>
         <!--- 登录操作,错误用户名,正确密码 -->
         <case>
                   <TestId>loginReg-testcase004</TestId>
                   <Title>用户登录</Title>
                   <Method>post</Method>
                   <Desc>错误用户名,正确密码</Desc>
                   <Url>http://127.0.0.1:8000/login_action/</Url>
                   <InptArg>{"username":"smith","password":"000000"}</InptArg><!---  用户名不同于initInfo.xml中用户信息 -->
                   <Result>200</Result>
                   <CheckWord>用户名或者密码错误</CheckWord>
         </case>
         <!--- 登录操作,错误用户名,错误密码 -->
         <case>
                   <TestId>loginReg-testcase005</TestId>
                   <Title>用户登录</Title>
                   <Method>post</Method>
                   <Desc>错误用户名,错误密码</Desc>
                   <Url>http://127.0.0.1:8000/login_action/</Url>
                   <InptArg>{"username":"smith","password":"123456"}</InptArg><!---  用户名、密码均不同于initInfo.xml中用户信息 -->
                   <Result>200</Result>
                   <CheckWord>用户名或者密码错误</CheckWord>
         </case>
         <!--- 登录操作成功 -->
         <case>
                   <TestId>loginReg-testcase006</TestId>
                   <Title>用户登录</Title>
                   <Method>post</Method>
                   <Desc>正确用户名,正确密码</Desc>
                   <Url>http://127.0.0.1:8000/login_action/</Url>
                   <InptArg>{"username":"Johnson","password":"000000"}</InptArg><!---  用户名、密码均同于initInfo.xml中用户信息 -->
                   <Result>200</Result>
                   <CheckWord>查看购物车</CheckWord>
         </case>
</node>


然后合并loginTest.pyregisterTest.py,形成loginRegTest.py

#!/usr/bin/env python
#coding:utf-8
import  unittest,requests
from util import  GetXML,DB,Util
class loginreg(unittest.TestCase):
        def setUp(self):
                print("--------测试开始--------")
                xmlfile =  "loginRegConfig.xml"
                #建立GetXML对象变量
                xmlInfo = GetXML()
                #获得是否需要登录的信息
                self.sign =  xmlInfo.getIsLogin(xmlfile)
                #获得所有测试数据
                self.mylists =  xmlInfo.getxmldata(xmlfile)
                #定义数据库表名
                self.userTable =  "goods_user"
                #获得初始化信息
                self.values =  xmlInfo.getUserInitInfo()
                #建立DB对象变量
                self.dataBase = DB()
                 Util.insertTable(self.dataBase,self.userTable,self.values)
        def test_register(self):
                for mylist in self.mylists:
                        data =  Util.run_test(mylist,self.values,self.sign)
                        #验证返回码
                         self.assertEqual(mylist["Result"],str(data.status_code))
                        #验证返回文本
                         self.assertIn(mylist["CheckWord"],str(data.text))
                        # 如果注册成功,删除刚建立的记录
                        if "注册用户名不存在" in  mylist["Desc"]:
                           payload = eval(mylist["InptArg"])
                           username =  "\""+payload["username"]+"\""
                      self.dataBase.delete(self.userTable,"username="+username)
                        print  (mylist["TestId"]+" is passsing!")
        def tearDown(self):
                 Util.tearDown(self.dataBase,self.userTable,self.values)
                print("--------测试结束--------")
if  __name__=='__main__':
        #构造测试集
        suite=unittest.TestSuite()
         suite.addTest(myregister("test_register"))
        #运行测试集合
        runner=unittest.TextTestRunner()
        runner.run(suite)


在这里加上这三行代码。

if "注册用户名不存在" in mylist["Desc"]:
         payload =  eval(mylist["InptArg"])
         username =  "\""+payload["username"]+"\""
self.dataBase.delete(self.userTable,"username="+username)


这个在处理注册成功以后是需要删除建立起来的记录,其目的是保证每个测试程序间的互相独立性。


刚才在interface/util.py中封装了下tearDown(),现在来封装setUp()。在Util类里面建立一个inivalue()方法。


#初始化信息
        def  inivalue(self,dataBase,ordertable,sign):
                #获得初始化信息
                if sign == "0":
                        values =  GetXML.getUserInitInfo(self)
                elif sign == "1":
                        values =  GetXML.getGoodInitInfo(self)
                elif sign == "2":
                        values =  GetXML.getAddressInitInfo(self)
                elif sign == "3":
                        values =  GetXML.getOrdersInitInfo(self)
                elif sign == "4":
                        values =  GetXML.getOrderInitInfo(self)
                else:
                        print("sign is  error in function inivalue")
                #建立记录
                 self.insertTable(dataBase,ordertable,values)
                return values


考虑到下面模块的使用,把用户、商品、收货地址、单个订单和总订单的初始化均写在这里了。


这样loginRegTest.py改造成。

#!/usr/bin/env python
#coding:utf-8
import  unittest,requests
from util import  GetXML,DB,Util
class  myregister(unittest.TestCase):
        def setUp(self):
                print("--------测试开始--------")
                xmlfile =  "loginRegConfig.xml"
                #建立GetXML对象变量
                xmlInfo = GetXML()
                #获得是否需要登录的信息
                self.sign =  xmlInfo.getIsLogin(xmlfile)
                #获得所有测试数据
                self.mylists =  xmlInfo.getxmldata(xmlfile)
                #建立DB变量
                self.dataBase = DB()
                #建立util变量
                self.util =Util()
                #初始化用户记录
                self.userTable =  "goods_user"
                self.userValues =  self.util.inivalue(self.dataBase,self.userTable,"0") 
                                     ...


userTest.py改造成。

#!/usr/bin/env python
#coding:utf-8
import unittest,requests
from util import  GetXML,DB,Util
class  userTest(unittest.TestCase):
        def setUp(self):
                print("--------测试开始--------")
                xmlfile =  "userInfoConfig.xml"
                #建立GetXML对象变量
                xmlInfo = GetXML()
                #获得是否需要登录的信息
                self.sign =  xmlInfo.getIsLogin(xmlfile)
                #获得所有测试数据
                self.mylists =  xmlInfo.getxmldata(xmlfile)
                #建立DB变量
                self.dataBase = DB()
                #建立util变量
                self.util =Util()
                #初始化用户记录
                self.userTable =  "goods_user"
                self.userValues =  self.util.inivalue(self.dataBase,self.userTable,"0")
...


可以看出以后的接口测试代码可以变得非常的简单,这样接口测试工作主要在于设计测试用例和书写XML文件(即设计测试数据),而不是维护测试代码了,因为大部分代码已经被封装了。最后建立一个runtest.py文件,内容如下。

#!/usr/bin/env python
#coding:utf-8
import unittest
from HTMLTestRunner  import HTMLTestRunner
test_dir='./'
discover=unittest.defaultTestLoader.discover(test_dir,pattern="*Test.py")
if __name__=='__main__':
         runner=unittest.TextTestRunner()
         #以下用于生成测试报告
         fp=open("result.html","wb")
         runner  =HTMLTestRunner(stream=fp,title='测试报告',description='测试用例执行报告')
         runner.run(discover)
         fp.close()


运行这个测试代码,形成测试报告,如图3-5所示。

           

image.png

3-5 测试报告


以后测试代码均以Test.py结尾,就可以使用这个TestSuite文件了。


星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net


顾翔凡言:

      软件测试正在生病,而且病得不轻,自动化测试被要不吹得太火,要不一点都不会,自动化比不过开发、测试又找不到缺陷,丢了西瓜也捡不到芝麻。

目录
相关文章
|
3月前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
94 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
7月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
202 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
安全 测试技术 Python
基于Django的电子商务网站开发(连载39)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
75 0
基于Django的电子商务网站开发(连载39)
|
存储 安全 前端开发
基于Django的电子商务网站开发(连载37)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
154 0
基于Django的电子商务网站开发(连载37)
|
测试技术 Python
基于Django的电子商务网站开发(连载36)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
96 0
基于Django的电子商务网站开发(连载36)
|
XML 测试技术 数据库
基于Django的电子商务网站开发(连载34)
基于Django的电子商务网站开发(连载34)
68 0
基于Django的电子商务网站开发(连载34)
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载33)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
97 0
基于Django的电子商务网站开发(连载33)
|
SQL XML 前端开发
基于Django的电子商务网站开发(连载40)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
184 0
|
测试技术 Python
基于Django的电子商务网站开发(连载38)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
92 0
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载35)
基于Django的电子商务网站开发(连载35)
107 0