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>查看购物车<font color="#FF0000">1</font></a></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-8 import unittest,requests from 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建立的测试数据。(读者也可以考虑如何将这两个测试用例分开,使得互相独立。)
星云测试
奇林软件
联合通测
顾翔凡言:
软件测试正在生病,而且病得不轻,自动化测试被要不吹得太火,要不一点都不会,自动化比不过开发、测试又找不到缺陷,丢了西瓜也捡不到芝麻。