4.接口测试
1)测试用例
表3-13为送货地址修改的测试用例。这里设计两个测试用例。
(1)修改一个当前登录用户不存在的收货地址信息,系统应该修改成功。
(2)修改一个当前登录用户已经存在的地址信息,系统应该报“这个地址已经存在!”的错误信息。
表3-13 送货地址修改的测试用例
编号 |
描述 |
期望结果 |
1 |
修改一个该用户没有使用过的地址 |
修改成功,并且可以正确地显示 |
2 |
修改一个该用户已经使用过的地址 |
显示“这个地址已经存在!”错误信息 |
2)XML数据文件
在addressConfig.xml文件中加入如下内容。
... <!--- 修改一个该用户没有使用过的地址 --> <case> <TestId>address-testcase003</TestId> <Title>地址信息</Title> <Method>post</Method> <Desc>修改一个该用户没有使用过的地址</Desc> <Url>http://127.0.0.1:8000/update_address/0/1/</Url> <InptArg>{"address":"上海市延安中路100号","phone":"13681166561"}</InptArg> <Result>200</Result> <CheckWord>上海市延安中路100号</CheckWord><!--- 与参数中phone保持一致 --> </case> <!--- 修改一个该用户已经使用过的地址 --> <case> <TestId>address-testcase004</TestId> <Title>地址信息</Title> <Method>post</Method> <Desc>修改一个该用户已经使用过的地址</Desc> <Url>http://127.0.0.1:8000/update_address/0/1/</Url> <InptArg>{"address":"上海市延安中路100号","phone":"13681166561"}</InptArg> <Result>200</Result> <CheckWord>这个地址已经存在!</CheckWord><!--- 与测试用例address-testcase003参数中address保持一致 --> </case> ...
测试用例address-testcase004是基于address-testcase003基础上的,在这里把address-testcase003<InptArg>…</InptArg>参数信息原封不变地进行复制。
3)测试代码
测试代码保持不变。
3.6.3 送货地址的删除
1. urls.py
... url(r'^delete_address/(?P<address_id>[0-9]+)/(?P<sign>[0-9]+)/$',views.delete_address), ...
(1)address_id为删除地址的id。
(2)当sign=1 表示从用户信息进入删除。
(3)当sign=2 表示从订单信息进入删除。
2. views. py
... # 删除地址信息 #sign=1 从用户信息进入 #sign=2 从订单用户信息进入 def delete_address(request,address_id,sign): util = Util() username = util.check_user(request) if username=="": uf = LoginForm() return render(request,"index.html",{'uf':uf,"error":"请登录后再进入"}) else: #获取指定地址信息 user_list = get_object_or_404(User, username=username) #删除这个地址信息 Address.objects.filter(id=address_id).delete() #返回地址列表页面 address_list = Address.objects.filter(user_id=user_list.id) #如果sign==2,返回订单信息页面 if sign=="2": return render(request, 'view_address.html', {"user": username,'addresses': address_list}) #进入订单用户信息 #否则进入用户信息页面 else: response = HttpResponseRedirect('/user_info/') # 进入用户信息 return response ...
(1)登录用户通过语句user_list= get_object_or_404(User, username=username)获得的用户信息。
(2)通过语句Address.objects.filter(id=address_id).delete()删除所需要删除的收货地址信息。
(3)通过语句address_list= Address.objects.filter(user_id=user_list.id)返回当前用户的所有收货地址信息。
(4)通过sign=="1"还是sign=="2"来判断调用方法user_info()还是调用模板view_address.html模板。
3. 模板
删除以后,根据参数sign进入用户信息页面或者生成订单选择地址页面。所以在这里没有专门的模板文件。
4. 接口测试
1)测试用例
表3-14为送货地址删除的测试用例。系统删除当前登录用户的一个送货地址信息,系统应该删除成功,在收货地址显示页面中不显示这条记录。
表3-14 送货地址删除的测试用例
编号 |
描述 |
期望结果 |
1 |
删除当前登录用户的一个送货地址信息 |
删除成功,在收货地址显示页面中不显示这条记录 |
使用测试程序向数据库中插入用户地址信息,然后测试产品代码是否可以正确地进行删除操作。
2)XML数据文件
在addressConfig.xml文件中加入如下内容。
... <!--- 删除地址信息 --> <case> <TestId>address-testcase005</TestId> <Title>地址信息</Title> <Method>get</Method> <Desc>删除地址信息</Desc> <Url>http://127.0.0.1:8000/delete_address/1234/1/</Url><!--- “1234”作为测试程序地址id插入数据库表中 --> <InptArg></InptArg> <Result>200</Result> <CheckWord>NOT,朝阳门外5454号</CheckWord><!--- NOT后字符将作为地址名称插入数据库中,验证这个信息删除后不能后去 --> </case> </node>
标签<Url>...</Url >中“1234”作为测试程序地址id插入数据库表中,标签<CheckWord>...</CheckWord>中的“NOT,”后字符串“朝阳门外5454号”将作为地址名称插入数据库中,验证这个信息删除后不能被显示。所以在这里不管地址id“1234”还是地址信息“朝阳门外5454号”都可以任意修改。在此特别说明,为了保证每一个测试用例的独立性,每一个测试用例尽可能做到不依赖于其他的测试用例。如果需要依赖,必须把依赖的测试用例联合在一起执行。
3)测试代码
在测试代码中,在运行测试的开始做了一个判断。
... #开始测试 def test_address_info(self): for mylist in self.mylists: if ("NOT" in mylist["CheckWord"]): #id从mylist["Url"]中获取 id = (mylist["Url"]).split("/")[4] #address从mylist["CheckWord"]中获取 address= (mylist["CheckWord"]).split(",")[1] addressvalues = id+",'"+address+"','13666666666',0" self.util.insertTable(self.dataBase,self.addressTable,addressvalues) ...
CheckWord 里面存在“NOT”,表示这条记录为需要删除地址信息的测试用例。在删除这条记录之前,需要先建立这条记录。
(1)通过配置文件中的(mylist["Url"]).split("/")[4]来获取需要建立收货地址记录的id。
(2)通过(mylist["CheckWord"]).split(",")[1]来获取这条收货地址记录的地址信息。
(3)电话号码硬编码为“13666666666”。
需要特别指出的是,在这里代码不删除初始化信息,是为了尽可能保证每一条测试用例之间的相互独立性。
在第3.5.4节中为了保持每一条测试用例的独立性,也应该另外建立一条购物车中的商品,然后进行删除,有兴趣的读者可以自己去修改完成。
星云测试
奇林软件
联合通测
顾翔凡言:
软件测试正在生病,而且病得不轻,自动化测试被要不吹得太火,要不一点都不会,自动化比不过开发、测试又找不到缺陷,丢了西瓜也捡不到芝麻。