编写 Python 测试脚本的最佳实践是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
shijingshijing
V2EX    程序员

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

  •  
  •   shijingshijing 2018-04-03 11:30:54 +08:00 2935 次点击
    这是一个创建于 2755 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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,出现升级提示,要求访问硬盘而造成屏幕冻结。

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

    4 条回复    2018-04-03 18:14:43 +08:00
    lioncui
        1
    lioncui  
       2018-04-03 12:05:35 +08:00
    你需要 selenium 框架
    ctro15547
        2
    ctro15547  
       2018-04-03 12:09:11 +08:00
    selenium+无头浏览器了解一下 ,现在新版本的 Chrome 都支持无 UI 界面调试了
    shijingshijing
        3
    shijingshijing  
    OP
       2018-04-03 13:40:38 +08:00 via iPhone
    @lioncui
    @ctro15547

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

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

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

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


    如果你一定要走这样的过程,估计还是要引入设计模式里的状态模式
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2633 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 13:16 PVG 21:16 LAX 06:16 JFK 09:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86