新年加入啄木鸟公众号,好运滚滚來!
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,
主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
...url(r'^view_all_order/$', views.view_all_order),... |
---|
...# 查看所有订单def view_all_order(request): util = Util() username = util.check_user(request) if username=="": uf = LoginForm() return render(request,"index.html",{'uf':uf,"error":"请登录后再进入"}) else: #获得所有总订单信息 orders_all = Orders.objects.all() #初始化列表,给模板 Reust_Order_list = [] #遍历总订单 for key1 in orders_all: #通过当前订单id获取这个订单的单个订单详细信息 order_all = Order.objects.filter(order_id=key1.id) #检查这个订单是不是属于当前用户的 user = get_object_or_404(User,id=order_all[0].user_id) #如果属于将其放入总订单列表中 if user.username == username: #初始化总订单列表 Orders_object_list = [] #初始化总订单类 orders_object = Orders_list #产生一个Orders_lis对象 orders_object = util.set_orders_list(key1) #初始化总价钱为0 prices=0 #遍历这个订单 for key in order_all: #初始化订单类 order_object = Order_list #产生一个Order_lis对象 order_object =util.set_order_list(key) #将产生的order_object类加入到总订单列表中 Orders_object_list.append(order_object) #计算总价格 prices = order_object.price * key.count + prices #把总价格放入到order_object类中 order_object.set_prices(prices) #把当前记录加到Reust_Order_list列中 #从这里可以看出,Reust_Order_list每一项是一个字典类型,key为总订单类orders_object,value为总订单列表Orders_object_list #总订单列表Orders_object_list中每一项为一个单独订单对象order_object,即Reust_Order_list=[{orders_object类:[order_object类,...]},...] Reust_Order_list.append({orders_object:Orders_object_list}) return render(request, 'view_all_order.html', {"user": username,'Orders_set': Reust_Order_list})... |
---|
(1)登录用户通过语句orders_all= Orders.objects.all()获得数据库中所有的总订单。
(2)通过循环语句forkey1 in orders_all遍历总订单,在循环体内通过语句order_all = Order.objects.filter(order_id=key1.id)获得当前总订单下的所有单个订单。
(3)通过语句user =get_object_or_404(User,id=order_all[0].user_id)获得单个订单的用户信息,由判断语句ifuser.username == username判断这个订单是否属于当前登录用户,只有属于当前登录用户的订单信息才可以被显示出来。
(4)通过orders_object= Orders_list初始化一个总订单类对象。
(5)通过语句orders_object= util.set_orders_list(key1)调用Util类中set_orders_list()方法获得总订单类对象。
(6)通过语句prices=0初始化总价钱为0,由循环语句for keyin order_all遍历当前总订单下的所有单个订单。
(7)在循环体内由语句order_object= Order_list和order_object =util.set_order_list(key)初始化并且获得单个订单order_object类对象。
(8)再由语句Orders_object_list.append(order_object)把单个订单类order_object对象加入到Orders_object_list列表变量中去,这里的Orders_object_list列表变量是在第一个循环后和第二个循环前被初始化的。
(9)通过语句prices =order_object.price * key.count + prices累积计算这个总订单内商品的总价钱,第二个循环结束,继续第一个循环。
(10)通过语句order_object.set_prices(prices)把总价钱加入到order_object类中。
(11)把orders_object和Orders_object_list以值参对的形式加入到Reust_Order_list列表变量中。
(12)通过语句Reust_Order_list.append({orders_object:Orders_object_list})把参数{orders_object:Orders_object_list}加入到列表变量Reust_Order_list后面,这里的列表变量Reust_Order_list是在第一个循环前初始化。
(13)最后调用view_all_order.html模板。
这里调用模板的变量Reust_Order_list是一个比较复杂的数据结构,首先它是一个列,每一个类中包含一个字典类型,这个字典类型的参数为总订单类orders_object,值为总订单列表Orders_object_list。总订单列表Orders_object_list中每一项为一个单独订单对象order_object。可以标记为Reust_Order_list=[{orders_object类:[order_object类,...]},...]。
set_orders_list()方法在goods/util.py中创建。
...def set_orders_list(self,key): order_list = Orders_list() order_list.set_id(key.id)#主键 order_list.set_address(key.address)#地址信息 order_list.set_create_time(key.create_time)#创建时间 return order_list... |
---|
方法返回Orders_list对象,Orders_list对象在object.py中定义。
...#总订单模型class Orders_list(): #总订单id def set_id(self,id): self.id=id #总订单收货地址 def set_address(self,address): self.address=address #总订单建立时间 def set_create_time(self,create_time): self.create_time=create_time... |
---|
view_all_order.html
{% 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> {% for key1 in Orders_set %} <div> <div> <table class="table table-striped"> <thead> <tr> <th>编号</th> <th>商品名称</th> <th>商品价钱</th> <th>个数</th> <th>删除</th> </tr> </thead> <tbody> {% for key2,value in key1.items %} {% for key in value %} <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}}/1/">删除</a></td> </tr> {% endfor %} 订单id:{{key2.id}},创建时间:{{key2.create_time}},地址:{{key2.address}}<br> {% if not key2.status %} <input type="submit" value="支付"> {% endif %} <a href="/delete_orders/{{key2.id}}/2/">删除</a> {% endfor %} </tbody> </table> </div> {% endfor %} </div>{% endblock %} |
---|
(1)通过{% forkey1 in Orders_set %}来遍历Orders_set中每一个字典类型。
(2)然后通过{% forkey2,value in key1.items %}来遍历字典类型中每一个参数和值。
(3)接下来通过{% forkey in value %}遍历key值下的每一个单独订单类型。
(4)最后通过{% ifnot key2.status %}判断当前订单是否支付,如果没有支付,显示【支付】按钮,如图3-20所示。
图3-20 查看所有订单
表3-16为生成所有订单的测试用例。同测试单个订单一样,测试程序通过初始化一个订单数据和对应的总订单数据,形成一个订单和对应的总订单,验证这些可以正确地被显示出来。
表3-16 生成所有订单的测试用例
编号 | 描述 | 期望结果 |
---|---|---|
1 | 显示当前用户的所有订单 | 当前用户的所有订单被正确地显示 |
在orderConfig.xml后面加上。
...<!--- 显示当前用户的所有订单 --> <case> <TestId>order-testcase003</TestId> <Title>订单信息</Title> <Method>get</Method> <Desc>显示当前用户的所有订单</Desc> <Url>http://127.0.0.1:8000/view_all_order/</Url> <InptArg></InptArg> <Result>200</Result> <CheckWord>上海市外滩一号</CheckWord><!--- 检查订单中的地址信息是否被正确显示 --> </case>... |
---|
测试代码保持不变。
星云测试
http://www.teststars.cc
奇林软件
http://www.kylinpet.com
联合通测
http://www.quicktesting.net