51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师【长期招募】博为峰网校招聘兼职讲师!【直播预售】接口测试行业大佬带你从青铜上王者一站式软件测试平台
【第97期】:如何设计搭建自动化测试框架!【专题】安全测试中的王牌工具—Wireshark 《51测试天地》分享测试经验赚稿费! 自学软件测试那点事
查看: 1242|回复: 34

【你来问我来答第97期】:如何设计搭建自动化测试框架!

[复制链接]
  • TA的每日心情
    擦汗
    2018-9-29 09:25
  • 签到天数: 494 天

    连续签到: 1 天

    [LV.9]测试副司令

    发表于 2018-11-1 11:22:25 | 显示全部楼层 |阅读模式

    论坛ID:卡卡罗特
    真实姓名: 何知非
    曾任公司: 恒生电子股份有限公司
    职位:测试技术部经理

    作品:移动端爬虫获取京东大数据集
    工作经验:
    从业测试技术领域约15年,早期做过一些软件开发和运维工作,进入测试行业最早是在浙江省移动业务支撑中心担任测试组长,除日常测试工作外,负责自动化测试框架的维护和开发。后来与朋友合伙出来经营了一家小公司,专门接一些测试外包单项目,如美国Trilogy公司,恒生电子,联众医疗,淘宝等。于2010年正式加入恒生电子股份有限公司,担任测试技术部经理一职。作为首个公司级测试技术专家(E5),编写过多套自动化测试框架,UI和接口均包含,运用过自动化测试工具较多,如Winrunner,QTP,Testcomplete,Selenium,Appium等。除自动化测试外,性能测试,渗透测试,爬虫等技术领域也有所涉猎。

    讲师语录:
    自动化测试框架设计的核心,可以概括为解决以下这些问题:
    1、测试数据要怎么准备,如何在框架中实现,是否可复用。
    2、测试用例的批量导入。
    3、用例之间是否存在逻辑关系,相互之间是否有影响,在框架中该如何处理。
    4、测试执行结果的导出和查看。
    5、执行失败的用例如何快速定位复现。
    6、对于UI自动化,当出现异常时(如对象获取不到,无法对对象进行指定操作),框架要如何对应处理,以保证整套用例不会中断执行。
    7、运用多进程和分布式管理的方式,实现在有限时间内完成大批量测试用例的执行。
    8、测试结果的数据统计,生成分析图表。


    各位会员可以在11月10日前以回帖的方式向客座专家提问。
    (请大家围绕本期客座专家的擅长领域进行提问、探讨)
    客座专家将在11月11日—11月31日为大家集中解答。

    机会难得,欢迎大家踊跃提问!



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复

    使用道具 举报

    该用户从未签到

    发表于 2018-11-7 19:58:10 | 显示全部楼层
    本帖最后由 卡卡罗特 于 2018-11-8 13:02 编辑
    bling123 发表于 2018-11-7 15:48
    报错内容是:AttributeError: 'str' object has no attribute 'instance'然后我又改成:
    d(className=(( ...

    我自己操作试了下。可以用xpath顺利执行。(用的机型为小米6,qq为最新版)通常首先考虑用id,如果没有id就用xpath。通过这两种属性基本都能定位并操作对应的办法。
    另外为了动态加载等待对象的时间,可以添加个WebDriverWait。比用sleep硬等待时间会更好些。


    参考代码如下(部分):
    from appium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    #配置
    caps = {'platformName': 'Android', 'deviceName': 'XXXX,'appPackage': 'com.tencent.mobileqq', 'appActivity': 'com.tencent.mobileqq.activity.SplashActivity','XXXX':'XXXX'}

    #驱动
    driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
    wait = WebDriverWait(driver, 30)


    #定位对象并调用方法操作
    xpath = u'//android.widget.TextView[@content-desc="说说"]'
    shuoshuo = wait.until(EC.presence_of_element_located((By.XPATH, xpath)))
    shuoshuo.click()


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 1 反对 0

    使用道具 举报

    该用户从未签到

    发表于 2018-11-5 14:49:43 | 显示全部楼层
    老师您好,请问jmeter原本返回101的请求在回放时返回400,这样的对压测结果又影响吗?大概是什么原因造成的呢?我们这个系统每个请求都会生成一个新的JESSIONID,不知道有没有影响
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-26 09:31
  • 签到天数: 972 天

    连续签到: 1 天

    [LV.10]测试总司令

    发表于 2018-11-7 08:48:17 | 显示全部楼层
    大佬好:
    关于这些:
    自动化测试框架设计的核心,可以概括为解决以下这些问题:
    1、测试数据要怎么准备,如何在框架中实现,是否可复用。
    2、测试用例的批量导入。
    3、用例之间是否存在逻辑关系,相互之间是否有影响,在框架中该如何处理。
    4、测试执行结果的导出和查看。
    5、执行失败的用例如何快速定位复现。
    6、对于UI自动化,当出现异常时(如对象获取不到,无法对对象进行指定操作),框架要如何对应处理,以保证整套用例不会中断执行。
    7、运用多进程和分布式管理的方式,实现在有限时间内完成大批量测试用例的执行。
    8、测试结果的数据统计,生成分析图表。

    您是怎么做的呢?、贵公司的UI自动化框架用到了哪些工具?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-7 14:07:26 | 显示全部楼层
    一直在思考这个问题:一个优秀的自动化测试框架应该具备哪些条件?希望嘉宾能够帮我解答这个困惑!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-7 14:11:36 | 显示全部楼层
    老师你好,在我们公司测试中,无论测试环境测试还是线上回归,都不可避免的会出现大量的垃圾数据。
    测试环境还好,可以清空数据库(清起来超爽😏 ,就是可能会被测试同事打)。但是生产环境无法接触到数据库。这些测试数据一条一条删起来很费力(selenium删或者手动删)。不知道您有什么好方式吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-8 09:22
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    发表于 2018-11-7 15:44:19 | 显示全部楼层
    你好,我这里有一个关于app元素定位的问题:
    定位到一个元素,如QQ中的“写说说”这个按钮(是一个半屏幕下拉框格式),我是通过text = "说说"定位的,但是实际运行的时候,无法成功运行,这是什么原因啊?

    然后我又想到通过android.widget.LinearLayout这个className定位,这个className是在第三个,就是说instance = 2,
    d(className=("android.widget.LinearLayout").instance(2)).click()有报错,这一块怎么处理呢?

    简约代码:
    #  com.tencent.mobileqq
    import uiautomator2 as u2
    from time import sleep
    d = u2.connect('192.168.1.129')
    d.app_start("com.tencent.mobileqq")
    d(text="动态").click()
    sleep(4)
    d(description = ("点击进入好友动态")).click()
    sleep(4)
    d(description=("写说说等按钮")).click()
    sleep(4)
    #  d(className=(("android.widget.LinearLayout").instance(2))).click()
    d.text("说说").click()
    sleep(4)
    d(text="分享新鲜事...").set_text("flyme!")
    sleep(4)
    d(text="发表").click()
    sleep(4)
    d(description = ("返回动态 按钮")).click()
    sleep(4)
    d.app_stop("com.tencent.mobileqq")

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-8 09:22
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    发表于 2018-11-7 15:48:15 | 显示全部楼层
    bling123 发表于 2018-11-7 15:44
    你好,我这里有一个关于app元素定位的问题:
    定位到一个元素,如QQ中的“写说说”这个按钮(是一个半屏幕 ...

    报错内容是:AttributeError: 'str' object has no attribute 'instance'

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-8 09:22
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    发表于 2018-11-7 15:48:22 | 显示全部楼层
    bling123 发表于 2018-11-7 15:44
    你好,我这里有一个关于app元素定位的问题:
    定位到一个元素,如QQ中的“写说说”这个按钮(是一个半屏幕 ...

    报错内容是:AttributeError: 'str' object has no attribute 'instance'然后我又改成:
    d(className=(("android.widget.LinearLayout").instance(2))).click()也不行

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-7 17:16:03 | 显示全部楼层
    Miss_love 发表于 2018-11-7 08:48
    大佬好:
    关于这些:
    自动化测试框架设计的核心,可以概括为解决以下这些问题:

    因为以上这些问题还是比较发散式的,点题的目的主要也是为了引发大家的思考。
    如果全部具体讲解的话,可能篇幅也会比较长。还是以引导的方式,提供些思考方向给大家吧:
    • 在测试数据准备上,尽量做到数据可复用,便于在集成测试时可循环执行。所以可以把数据的初始化通过在数据库当中用sql语句或存储过程的方式实现,并且可以将此步骤放在自动化测试执行起始或结束处。
    • 如果团队中测试人员们的技术功底较好,可以考虑直接将测试用例存放在数据库中来批量导入,内存读取效率是很高的。其次也可以把测试用例批量导入的载体换为xml或Excel文件。
    • 用例之间如果存在逻辑关系,建议对用例进行分组,使各组用例之间相对独立,执行结果或产生异常也能互不影响。
    • 测试执行结果的导出方式就很多了,结合业务和系统架构场景,怎么方便高效怎么来。查看上做到直观易懂就行。
    • 对于执行失败的用例原因定位,最好能通过在自动化测试脚本中编辑对应的异常输出日志来定位,而不是单纯靠脚本语言自己提供的报错信息。
    • 在UI自动化测试中,对于事先无法预知的异常,可以考虑通过事件触发机制来做判断,然后添加上一些比如关闭弹窗、模拟回车和退出键的操作,使得焦点恢复到主窗体,然后通过测试框架的驱动进入到下一组执行用例中。
    • 目前我有一门主题为《利用Scrapy搭建分布式自动化接口测试框架》课程,讲的就是以http/s接口测试为例,通过多进程、分布式多主机并发的方式来进行自动化测试的。课件已在后期处理中,即将上线,欢迎干兴趣的小伙伴的到时候关注。
    • 测试结果的统计,包含的信息可以有执行时长、总执行用例数、成功/失败执行用例比、失败用例自动retry次数、本轮执行与上轮执行的不同点统计等等。可关注的点还是蛮多的,当然也可以和项目组成员及产品经理多多交流,听听他们想关注的信息。前端动手能力强的,结合图表方式来展示,自然是更好啦!

    期望以上这些信息能对大家的工作有所帮助~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-7 17:17:32 | 显示全部楼层
    明晚打老虎 发表于 2018-11-5 14:49
    老师您好,请问jmeter原本返回101的请求在回放时返回400,这样的对压测结果又影响吗?大概是什么原因造成的 ...

    Jmeter我不太熟哦,建议问下上一期的专家大佬,哈哈~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-7 17:24:07 | 显示全部楼层
    测试乞丐 发表于 2018-11-7 14:07
    一直在思考这个问题:一个优秀的自动化测试框架应该具备哪些条件?希望嘉宾能够帮我解答这个困惑!

    出发点还是要以提高测试效率,扩大用例覆盖范围作为自动化测试的目标。
    另外团队的力量一定是大于个人的。所以如果你的角色是作为测试团队中的测试开发,还要考虑到开发出来的自动化测试框架是否适用于目前团队成员及项目/产品现状,能否帮助他们改进日常的工作。(这里还要考虑到团队的技术基础。必要时对他们输出相应的培训和使用指导)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-7 17:31:47 | 显示全部楼层
    热情的绿洲 发表于 2018-11-7 14:11
    老师你好,在我们公司测试中,无论测试环境测试还是线上回归,都不可避免的会出现大量的垃圾数据。
    测试环 ...

    条件允许的话,如果希望测试数据尽可能接近生产环境(这点我也比较赞同),可以考虑把生产库的数据全部或部分拷贝出来,搭建到独立的自动化测试环境中,这样同样也可以避免影响到其他测试同事的数据。
    在测试环境准备上,可以通过vmware或docker容器的方式,相对节省资源。
    再强调一遍,独立的自动化测试环境,在执行上还是很有必要的。这块资源一般公司还是都能有条件提供的吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-8 11:39:11 | 显示全部楼层
    嘉宾你好,看到你的课程内容,以下有几点我想咨询下:
    1.性能如何评估(现在爬虫主要语言:python,java这两个有成熟框架可以弄)
    2.数据质量用什么做标准 ?
    3.策略和去重
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-8 11:41:20 | 显示全部楼层
    你好老师,想问下关于爬虫的内容。
    最近也刚开始接触爬虫测试,开发写好爬虫脚本让我来测试验证,我这边的验证方法主要有两点:一是,运行爬虫脚本观察是否会出现异常,这点主要是通过查看log日志来检查的;二是,检查爬取的数据对不对,这点主要是查看数据库里的数据字段是不是全,是否都有值;不知道这个对不对。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-8 13:14:42 | 显示全部楼层
    海鸥一飞 发表于 2018-11-8 11:41
    你好老师,想问下关于爬虫的内容。
    最近也刚开始接触爬虫测试,开发写好爬虫脚本让我来测试验证,我这边的 ...

    你好,你的测试方法完全可行。
    另外建议可以补充几点:
    1、检查下最终的爬取记录总数,看是否存在爬虫执行过程中有丢包。
    2、现在网站实施反爬措施的也日益增多。通常在爬取一段时间后就会被触发,所以需要跟踪观察。
    3、如果遇到反爬的网站,处理机制通常会用到cookie池和ip池两种方式,可以和你的开发小伙伴一起了解下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-8 13:37:24 | 显示全部楼层
    always_fly 发表于 2018-11-8 11:39
    嘉宾你好,看到你的课程内容,以下有几点我想咨询下:
    1.性能如何评估(现在爬虫主要语言:python,java这 ...

    你好,根据你提到的几点:
    1、我主要用python,上手加快的框架可以选用pyspider(入门课程这两天就会上线)。功能更强大的,灵活配置度高的,可以选用scrapy框架(我的另一门分布式自动化测试框架课程用有讲解到此工具,目前课程已在后期处理中)。对于java我用的不多。所以没法回答你两者的性能比较。2、数据质量标准?嗯,不是很明白你的意思……就我的理解,爬取的数据大多是作为大数据分析的“原材料”,相关的大数据分析师,或搞机器对抗、人工AI的工程师,会明确提供给爬虫师对应的要求吧?
    3、爬虫建议用非阻塞式请求会来的效率快。配合multiprocessing模块可以实现多进程方式,还有treading多线程方式,可以根据自己的需求搭配使用。在去重机制上,Scrapyd-Redis库自带此功能。另外还有国人对去重指纹做优化后的改良版scrapyd-redis-bloomfilter(布隆过滤器)可以了解下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 7 天前 | 显示全部楼层
    嘉宾,你好。请教下关于“Android图形自带以及新开发的控件以及方法”的自动化测试框架都在用哪种哈?
    是手动在测试还是自动化的呢?
    若是自动化的话都在用CTS在测试的么?有没有在用其他测试框架的啊?
    多谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 7 天前 | 显示全部楼层
    嘉宾你好,您的经历非常的丰富。我想咨询下您,现在测试框架越来越多,如果来选择自己的测试框架,您这边有什么好的看法吗?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2018-11-16 11:37 , Processed in 0.075551 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2018 Comsenz Inc.

    快速回复 返回顶部 返回列表