前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Django的电子商务网站开发(连载22)

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

作者头像
顾翔
发布2019-12-11 16:01:08
3640
发布2019-12-11 16:01:08
举报
4 接口测试
1) 测试用例

表3-4为商品信息列表的测试用例。测试目的是把测试数据中的商品信息插入到数据库中,检验这个商品的列表信息是否可以正确地被显示出来。

表3-4 商品列表测试用例

编号

描述

期望结果

1

分页显示当前所有的商品的概要信息

添加的信息能够被及时地显示出来

2)XML文件

在initInfo.xml中加入初始化数据。

...<!--- 初始化商品信息 --> <case> <goodid>0</goodid><!--- 商品id --> <name>龙井茶叶</name><!--- 商品名称 --> <price>1234.56</price><!--- 商品价钱 --> <picture>upload/0.jpg</picture><!--- 商品图片 --> <desc>龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶龙井茶叶</desc><!--- 商品描述 --> </case>...

然后建立测试数据配置文件goodsConfig.xml。内容如下。

<?xml version="1.0" encoding="UTF-8"?><node> <case> <login>1</login> </case> <!--- 翻页显示当前所有的商品信息 --> <case> <TestId>goods-testcase001</TestId> <Title>商品信息</Title> <Method>get</Method> <Desc>显示商品列表信息</Desc> <Url>http://127.0.0.1:8000/goods_view/</Url> <InptArg></InptArg> <Result>200</Result> <CheckWord>龙井茶叶</CheckWord><!--- 与初始化商品名称保持一致 --> </case></node>

3)测试代码

首先在interface/util.py文件GetXML中建立一个方法getGoodInitInfo(),用于从初始化initInfo.xml文件中获取建立goods表的内容,并在setUp()方法中使用。

#获取initInfo.xml中的商品初始化数据 def getGoodInitInfo(self): dom = minidom.parse("initInfo.xml") self.root = dom.documentElement #从XML中读取数据 goodid = self.root.getElementsByTagName('goodid') goodid = (str(goodid[0].firstChild.data)).strip() name = self.root.getElementsByTagName('name') name = "\""+(str(name[0].firstChild.data)).strip()+"\"" price = self.root.getElementsByTagName('price') price = (str(price[0].firstChild.data)).strip() picture = self.root.getElementsByTagName('picture') picture = "\""+(str(picture[0].firstChild.data)).strip()+"\"" desc = self.root.getElementsByTagName('desc') desc = "\""+(str(desc[0].firstChild.data)).strip()+"\"" values = goodid +","+name+","+price+","+picture+","+desc return values #返回的字符串values供插入数据库表goos_goods中使用

然后在这个文件中的Util类中加入方法tearDown()用于删除setUp中建立的good信息。

def tearDown(self,dataBase,table,values): #获取初始化数据库中的记录主码 id = values.split(',')[0] #删除这条记录 dataBase.delete(table,"id="+id)

建立测试代码goodsInfoTest.py。

#!/usr/bin/env python#coding:utf-8import unittest,requestsfrom util import GetXML,DB,Util class goodTest(unittest.TestCase): def setUp(self): print("--------测试开始--------") xmlfile = "goodsConfig.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.goodsTable = "goods_goods" self.goodsValues = self.util.inivalue(self.dataBase,self.goodsTable,"1") #开始测试 def test_goods_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)) #验证返回文本 self.assertIn(mylist["CheckWord"],str(data.text)) print (mylist["TestId"]+" is passsing!") def tearDown(self): self.util.tearDown(self.dataBase,self.goodsTable,self.goodsValues) self.util.tearDown(self.dataBase,self.userTable,self.userValues) #关闭数据库连接 self.dataBase.close() print("--------测试结束--------") if __name__=='__main__': #构造测试集 suite=unittest.TestSuite() suite.addTest(goodTest("test_goods_info")) #运行测试集合 runner=unittest.TextTestRunner()runner.run(suite)

在方法setUp()中,建立完毕用户以后,通过下面的语句建立初始化商品信息。

#初始化商品记录self.goodsTable = "goods_goods"self.goodsValues = self.util.inivalue(self.dataBase,self.goodsTable,"1")

最后在tearDown()方法中通过接下来的语句删除setUp()方法中建立的商品信息。

self.util.tearDown(self.dataBase,self.goodsTable,self.goodsValues)

同样使用下面的语句删除setUp()方法中建立的用户信息。

self.util.tearDown(self.dataBase,self.userTable,self.userValues)

在这里把interface/util.py中Util类里的insertTable()方法进行优化。假设在上一个测试中出现了错误,测试程序没有正常结束,即没有完成tearDown()方法中的代码就进行了下一个测试用例的执行,这样就可能出现在这次setUp()方法中往数据库表中插入的数据由于上一次没有执行tearDown()方法中的删除记录操作而重复插入,导致这次插入的不成功。所以对方法insertTable()进行如下的改造。

...#插入数据 #dataBase为数据库 #table为数据库表 #values为值 def insertTable(dataBase,table,values): #获取插入数据的id id = values.split(',')[0].strip("\"") #连接数据库 dataBase.connect() #查询数据库表中是否存在 if dataBase.searchByid(table,id): #如果存在,删除这条记录 dataBase.delete(table,"id="+id) #插入测试所需要的用户 dataBase.insert(table,values)...

粗体字部分为新加的内容,同时在这里新加了一个searchByid()方法,其代码如下。

#通过主键查询数据库表中的内容def searchByid(self,tablename,id): return(self.cur.execute("select * from "+tablename+" where id="+id))

在insertTable()方法中,在插入数据库表前,通过语句if dataBase.searchByid(table,id)先判断数据库表中是否存在这条记录,如果存在就把它给删除。

星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4 接口测试
    • 1) 测试用例
      • 2)XML文件
        • 3)测试代码
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档