首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Django的电子商务网站开发(连载33)

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

作者头像
顾翔
发布2019-12-11 17:10:27
3710
发布2019-12-11 17:10:27
举报

新年加入啄木鸟公众号,好运滚滚來!

顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,

主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。

3. 模板

{% extends "base.html" %}{% block content %} </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="/user_info/">{{user}}</a></li> <li><a href="/logout/">退出</a></li> </ul> </div><!--/.nav-collapse --> </div> </nav> <div class="container theme-showcase" role="main"> <div> <div id="navbar" class="navbar-collapse collapse"> </div><!--/.navbar-collapse --> </div> <p>生成时间:{{orders.create_time}} 配货地址:{{address}}总价钱:¥{{prices}}</p> <div> <div> <table class="table table-striped"> <thead> <tr> <th>编号</th> <th>商品名称</th> <th>商品价钱</th> <th>个数</th> <th>删除</th> </tr> </thead> <tbody> {% for key in order %} <tr> <td><a href="/view_goods/{{key.good_id}}/">{{ key.id }}</a></td> <td>{{ key.name }}</td> <td>¥{{ key.price }}</td> <td>{{ key.count }}</td> <td><a href="/delete_orders/{{key.id}}/3/">删除</a></td> </tr> {% endfor %} </tbody> </table> <input type="submit" value="支付"> </div> </div>{% endblock %}

总订单信息通过<p>生成时间:{{orders.create_time}} 配货地址:{{address}} 总价钱:¥{{prices}}</p>显示订单信息,通过{%for key in order %}遍历显示。如图3-19所示。

图3-19 显示当前生成的订单

4. 接口测试
1)测试用例

表3-15为生成订单的测试用例,这个订单仅包含一个订单。测试程序通过初始化一个订单数据和对应的总订单数据,形成一个订单和对应的总订单,验证是否可以正确地被显示出来。

表3-15 生成一个订单的测试用例

编号

描述

期望结果

1

生成并且显示当前用户的一个订单

生成并且正确地被显示

2)XML数据文件

首先在initInfo.xml建立订单信息。

<!--- 初始化总订单信息 --> <case> <ordersid>0</ordersid><!--- 总订单id --> <createtime>Sept. 8, 2017, 6:29 a.m.</createtime><!--- 总订单产生日期 --> <status>1</status><!--- 这里必须设置为1,表示已支付,与测试代码区别 --> <ordersaddressid>0</ordersaddressid><!--- 地址id,与初始化地址id保持一致 --> </case><!--- 初始化单个订单信息 --> <case> <orderid>0</orderid><!--- 单个订单id --> <count>9999</count><!--- 单个订单数量,这里必填9999 ,与测试代码区别--> <ordergoodid>0</ordergoodid><!--- 商品id,与初始化商品id保持一致 --> <orderorderid>0</orderorderid><!--- 总订单id,与初始化总订单id保持一致 --> <orderuserid>0</orderuserid><!--- 用户id,与初始化用户id保持一致 --> </case></node>

由于在这里要使用到cookie,所以在测试程序开始要通过程序代码来向购物车中添加一个商品。这里的测试用例与购物车的测试用例第一条是一样的。建立测试配置文件orderConfig.xml。

<?xml version="1.0" encoding="UTF-8"?><node> <case> <login>1</login> </case> <!--- 添加进购物车,查看显示购物车内商品数量的变化 --> <case> <TestId>order-testcase001</TestId> <Title>购物车</Title> <Method>get</Method> <Desc>添加进购物车</Desc> <Url>http://127.0.0.1:8000/add_chart/0/1/</Url> <InptArg></InptArg> <Result>200</Result> <CheckWord>查看购物车&lt;font color=&quot;#FF0000&quot;&gt;1&lt;/font&gt;&lt;/a&gt;</CheckWord><!--- 显示添加成功 --> </case> <!--- 生成并且显示当前用户的一个订单 --> <case> <TestId>order-testcase002</TestId> <Title>订单信息</Title> <Method>post</Method> <Desc>生成并且显示当前用户的一个订单</Desc> <Url>http://127.0.0.1:8000/create_order/</Url> <InptArg>{"address":"0"}</InptArg> <Result>200</Result> <CheckWord>1234.56</CheckWord><!--- 检查单个订单中的价格信息是否正确显示,order-testcase002必须为建立订单 --> </case>

3)测试代码

orderTest.py

#!/usr/bin/env python#coding:utf-8import unittest,requestsfrom util import GetXML,DB,Util class orderTest(unittest.TestCase): def setUp(self): print("--------测试开始--------") xmlfile = "orderConfig.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") #初始化商品记录 self.goodTable = "goods_goods" self.goodValues = self.util.inivalue(self.dataBase,self.goodTable,"1") #初始化地址记录 self.addressTable = "goods_address" self.addressValues = self.util.inivalue(self.dataBase,self.addressTable,"2") #初始化总订单记录 self.ordersTable = "goods_orders" self.ordersValues = self.util.inivalue(self.dataBase,self.ordersTable,"3") #初始化订单记录 self.orderTable = "goods_order" self.orderValues = self.util.inivalue(self.dataBase,self.orderTable,"4") #开始测试 def test_order_info(self): for mylist in self.mylists: data = self.util.run_test(mylist,self.userValues,self.sign) #验证返回码 self.assertEqual(mylist["Result"],str(data.status_code)) #验证返回文本 #如果mylist["CheckWord"]标签中存在"NOT"字符串,调用断言方法assertNotIn() if "NOT" in mylist["CheckWord"]: self.assertNotIn((mylist["CheckWord"]).split(",")[1],str(data.text)) #建立单独订单记录self.util.insertTable(self.dataBase,self.ordersTable,self.ordersValues) #建立总订单记录self.util.insertTable(self.dataBase,self.orderTable,self.orderValues) #否则调用断言方法assertIn() else: self.assertIn(mylist["CheckWord"],str(data.text)) #如果是验证查看全部订单,测试完毕把测试数据删除if "view_all_order" in mylist["Url"]: self.dataBase.delete(self.ordersTable,"status='0'") self.dataBase.delete(self.orderTable,"count=1") print (mylist["TestId"]+" is passsing!") def tearDown(self): #删除setup建立的单个订单 self.util.tearDown(self.dataBase,self.orderTable,self.orderValues) #删除setup建立的总订单 self.util.tearDown(self.dataBase,self.ordersTable,self.ordersValues) #删除setup建立的地址 self.util.tearDown(self.dataBase,self.addressTable,self.addressValues) #删除setup建立的商品 self.util.tearDown(self.dataBase,self.goodTable,self.goodValues) #删除setup建立的用户 self.util.tearDown(self.dataBase,self.userTable,self.userValues) #关闭数据库连接 self.dataBase.close() print("--------测试结束--------") if __name__=='__main__': #构造测试集 suite=unittest.TestSuite() suite.addTest(orderTest("test_order_info")) #运行测试集合 runner=unittest.TextTestRunner() runner.run(suite)

由于在这里用户、商品、收货地址、单个订单和总订单信息都要用到,所以在Setup()方法中都要进行初始化。由于测试用例order-testcase003必须要用到order-testcase002建立的测试记录,所以在order-testcase003后删除order-testcase002建立的测试数据。(读者也可以考虑如何将这两个测试用例分开,使得互相独立。)

星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3. 模板
  • 4. 接口测试
    • 1)测试用例
      • 2)XML数据文件
        • 3)测试代码
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档