V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shijingshijing
V2EX  ›  程序员

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

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

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

    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   ·   实用小工具   ·   3013 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:54 · PVG 21:54 · LAX 05:54 · JFK 08:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.