表3-4为商品信息列表的测试用例。测试目的是把测试数据中的商品信息插入到数据库中,检验这个商品的列表信息是否可以正确地被显示出来。
表3-4 商品列表测试用例
编号 | 描述 | 期望结果 |
---|---|---|
1 | 分页显示当前所有的商品的概要信息 | 添加的信息能够被及时地显示出来 |
在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> |
---|
首先在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