编写 Python 测试脚本的最佳实践是什么?

2018-04-03 11:30:54 +08:00
 shijingshijing

以最简单的一个场景为例:

Step 1:打开 Chrome 浏览器。

Step 2:进入个人 Dashboard 页面,查看未处理任务列表。

Step 3:进入单个任务页面,查看任务详细内容

   3.1 如果是结束待确认的任务,直接点击确认按钮确认
   3.2 如果是进行中的任务,进行如下操作:
       3.2.1 查看上一个人员的意见,如果有附件,需要将附件下载下来。
       3.2.2 填写反馈意见。
       3.2.3 提交给下一步处理人员。
   3.3 如果是新的任务,进行如下操作:
       3.3.1 填写任务报告。
       3.3.2 如果有原始图片、数据等材料,则上传这些材料。
       3.3.3 选择多个评审人员,提交报告进行下一步评审。

Step 4:处理完毕后,返回 Dashboard 页面,点击登出。

上面各个步骤执行过程中,任意一个步骤(及其子步骤,比如 3.2.3 和 3.3.3 的提交后的结果)都可能出错,分以下几种情况:

1.1.因为未登录而被跳转到登录页面(执行过程中 Cookie 过期,服务器清空 SessionID 等)
    1.1.1 - 不是连续第三次出现这种情况,则使用登录脚本进行登录,然后跳转至 Step 2 重新开始,出错计数加 1
    1.1.2 - 是连续第三次出现这种情况,停止测试,记录当前错误到日志,截图。
1.2.因为网络被电信劫持而无法跳转
    1.2.1 - 不是连续第三次出现这种情况,则跳转至 Step 2 重新开始,出错计数加 1
    1.2.2 - 是连续第三次出现这种情况,停止测试,记录当前错误到日志,截图。
1.3.因为服务端程序出错,如 404 页面
    1.3.1 - 不是连续第三次出现这种情况,则跳转至 Step 2 重新开始,出错计数加 1
    1.3.2 - 是连续第三次出现这种情况,停止测试,记录当前错误到日志,截图。
1.4.因为本地网络故障,无法访问任何页面
    1.4.1 - 不是连续第三次出现这种情况,则跳转至 Step 1 重新开始,出错计数加 1
    1.4.2 - 是连续第三次出现这种情况,停止测试,记录当前错误到日志,截图。
1.5.其他非意向中的情况:
    1.5.1 - 不是连续第三次出现这种情况,则跳转至 Step 1 重新开始,出错计数加 1
    1.5.2 - 是连续第三次出现这种情况,停止测试,记录当前错误到日志,截图。

我想问一下,如果要比较优雅的编制测试脚本,应该如何处理上述情况。

目前个人的尝试是:
每个步骤都使用 try catch,任意一个步骤出现了非预期结果,raise 一个 exception,exception 中 switch case 放置 1.1 - 1.5 几种出错情况及其应对措施。
请问还有其他好的方法么?

目前测试环境是在 Windows XP 下使用 Chrome 浏览器,对于 Win 7 下的情况不了解,但有一个问题想咨询一下,Win 7 在执行测试过程中,如果碰到 UAC 权限

请求导致屏幕冻结,是否影响 Python 测试脚本的执行。因为在 Win 7 上碰到过打开 Firefox,出现升级提示,要求访问硬盘而造成屏幕冻结。

我没怎么做过测试,一般也就自己写的代码做做单元测试,希望各位测试高手多发表意见进行指正。

2373 次点击
所在节点    程序员
4 条回复
lioncui
2018-04-03 12:05:35 +08:00
你需要 selenium 框架
ctro15547
2018-04-03 12:09:11 +08:00
selenium+无头浏览器了解一下 ,现在新版本的 Chrome 都支持无 UI 界面调试了
shijingshijing
2018-04-03 13:40:38 +08:00
@lioncui
@ctro15547

谢谢回复,我知道 selenium,也知道 chrome 的 headless 模式,PhantomJS 也用过。

我想问的不是这个,而是还有什么比这种一层层 try catch 更优雅的处理方法,只是用了 web 测试来举例。我举的这个例子才几步,实际碰到的有十几步的,一直这样 try catch 感觉不太合适,但我确实也想不到更好的方法了,所以想问问做测试的大佬,在这种步骤比较多,又容易碰到出错的情况,有没有更好的设计模式。
264768502
2018-04-03 18:14:43 +08:00
步骤太多太大,流程太复杂
先做拆分,每个测试点越小越好

利用 mock 做好对应测试点的准备活动

这样你就不会有三次后怎么样,三次内这样的分支


如果你一定要走这样的过程,估计还是要引入设计模式里的状态模式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/443853

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX