51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 24766|回复: 51
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    无聊
    6 天前
  • 签到天数: 941 天

    连续签到: 3 天

    [LV.10]测试总司令

    跳转到指定楼层
    #
    发表于 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
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏2
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-10 21:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    推荐
    发表于 2018-11-7 17:16:03 | 只看该作者
    Miss_love 发表于 2018-11-7 08:48
    大佬好:
    关于这些:
    自动化测试框架设计的核心,可以概括为解决以下这些问题:

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-10 21:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-10 21:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    推荐
    发表于 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

    使用道具 举报

    该用户从未签到

    48#
    发表于 2020-6-24 16:36:21 | 只看该作者
    bling123 发表于 2018-11-7 15:44
    你好,我这里有一个关于app元素定位的问题:
    定位到一个元素,如QQ中的“写说说”这个按钮(是一个半屏幕 ...

    d(className="android.widget.LinearLayout", instance=2).click()
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    47#
    发表于 2019-1-14 17:30:49 | 只看该作者
    卡卡罗特 发表于 2018-11-7 17:16
    因为以上这些问题还是比较发散式的,点题的目的主要也是为了引发大家的思考。
    如果全部具体讲解的话,可 ...

    测试数据准备通常放在自动化测试执行起始处。放在结束处还请举例。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    46#
    发表于 2019-1-14 17:23:20 | 只看该作者
    卡卡罗特 发表于 2018-11-7 17:31
    条件允许的话,如果希望测试数据尽可能接近生产环境(这点我也比较赞同),可以考虑把生产库的数据全部或 ...

    独立的自动化测试环境,在执行上还是很有必要的。认同这句话,问题是很多公司都不提供独立的自动化测试环境,经常见到的是,开发团队使用的测试环境A,手工测试和自动化测试共用测试环境B。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-10 21:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    45#
    发表于 2018-11-28 16:23:05 | 只看该作者
    bling123 发表于 2018-11-28 09:48
    脚本:

    test_case1_njzx_login.py文件中:

    看不清楚。
    建议从报错信息源头去跟踪排查。
    比如从你帖出来的信息,可以看到报错点出在:
    error: Unhandled error: TypeError: undefined is not a function
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-10 21:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    44#
    发表于 2018-11-28 16:22:57 | 只看该作者
    bling123 发表于 2018-11-28 09:48
    脚本:

    test_case1_njzx_login.py文件中:

    看不清楚。
    建议从报错信息源头去跟踪排查。
    比如从你帖出来的信息,可以看到报错点出在:
    error: Unhandled error: TypeError: undefined is not a function
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-10 21:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    43#
    发表于 2018-11-28 15:56:17 | 只看该作者
    MilgGtery 发表于 2018-11-22 13:30
    老师你好,目前在学习自动化测试框架。
    Serenity、Robot Framework、RedwoodHQ、Sahi、Galen Framework、G ...

    你好,对java比较熟悉的话可以尝试下Jenkins,该框架结合基于Junit的TestNG,以及Selenium都可以很好的配套使用,网上有不少相关的教程和帖子可以观摩学习。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-10 21:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    42#
    发表于 2018-11-28 15:49:45 | 只看该作者
    悠悠小仙仙 发表于 2018-11-22 13:24
    老师你好,我想问下一个项目中自动化测试是否能有效的展开,自动化测试框架是关键所在是在哪里?

    你好,自动化能否有效的开展,概括的讲可以从“测试用例的覆盖范围”,以及“测试执行效率”这两方面来进行考量,当然还可以加上如“自动化缺陷发现量与总缺陷量的占比”等相关统计数据来综合评估。
    讲的口语化些,就是上了自动化后,产品或项目的测试范围有哪些变化或增量?执行时长比原来缩短了多少?有哪些缺陷是通过自动化测试才发现的?或者说是手工测试较难或难以发现的缺陷。
    举个实际案例:
    有次在调试自动化接口测试时,发现有个api接口在发送请求时,json传参里有很多和实际需求不相关的参数,虽然功能上能正常使用,也就是在做黑盒功能测试时不会觉得有什么问题,但实际上是增加了应用的资源开销。尤其在用户量达到一定量级后,性能上造成的影响就会暴露。于是提交了给开发做了优化。算是在做性能测试前提前排了个雷。
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]测试小兵

    41#
    发表于 2018-11-28 09:48:15 | 只看该作者
    bling123 发表于 2018-11-28 09:47
    你好,在工作的途中执行脚本的时候一直卡这里就不运行了,网上说要修改等待时间什么的,没用,您看看这是什 ...

    脚本:

    test_case1_njzx_login.py文件中:
    ## 实现守护宝app登录
    #  包名和activity名:com.njzx.care/com.njzx.care.activity.MainActivity
    # !/usr/bin/python
    # encoding:utf-8
    import time
    import unittest
    from appium import  webdriver

    class test_login(unittest.TestCase):
        #  1、环境准备与还原:文件配置
        def setUp(self):
            desired_caps = {}
            desired_caps['platformName'] = 'Android'
            desired_caps['platformVersion'] = '7.0'
            desired_caps['deviceName'] = '0123456789ABCDEF:5037'
            # desired_caps['browserName'] = ''
            #  desired_caps['chromeOptions'] = {'androidProcess': 'com.tencent.mm:tools'}  # 驱动html5,必备
            desired_caps['appPackage'] = 'com.njzx.care'
            desired_caps['appActivity'] = 'com.njzx.care.activity.MainActivity'
            # desired_caps["unicodeKeyboard", "True"]  # 支持中文输入
            # desired_caps["resetKeyboard", "True"]  # 支持中文输入,必须两条都配置
            # desired_caps['automationName'] = 'Selendroid'#  link_text定位方式是Selendroid框架中的定位方式,因此appium若想采用,则需在代码加入
            desired_caps['newCommandTimeout'] = '100'  # 超时时间
            self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

        def tearDown(self):
            self.driver.quit()

        #  2、登录业务流程:
        #     (1)启动app
        #     (2)点击text = "您好,请登录"或者id  = "com.njzx.care:id/tv_helloname"进入登录界面
        #     (3)输入手机号码id = "com.njzx.care:id/et_username"和密码id = "com.njzx.care:id/et_password"
        #     (4)如果手机已经注册,可以直接登录;如果不存在,需要注册text= "快速注册"
        #     (5)点击登录id = "com.njzx.care:id/iv_login"
        def test_sendAndLogin(self):
            time.sleep(2)#  动态加载等待对象的时间,可以添加个WebDriverWait
            startLogin_text = self.find_element_by_text("您好,请登录")
            startLogin_text_id = self.find_element_by_id("com.njzx.care:id/tv_helloname")
            startLogin_text.click()
            time.sleep(2)
            text_num1 = input("请输入注册号码:")
            text_psd2 = input("请输入密码:")

            #  打开本地的用户名+ 密码存储文件
            user_info_file = open('user_info.txt', 'r')  # 用户名和密码存储文件
            user_info_list = user_info_file.readlines()  # 正确的用户名和密码存储队列
            correct_username = user_info_list[0].strip()  # 正确的用户名
            correct_password = user_info_list[1]  # 正确的密码
            user_info_file.close()

            if text_num1 == correct_username and text_psd2 == correct_password:
                print('账号存在,可以登录')
                time.sleep(2)
                self.find_element_by_id("com.njzx.care:id/et_username").send_keys(text_num1)
                self.find_element_by_id("com.njzx.care:id/et_password").send_keys(text_psd2)
            else:
                print('账号不存在,请重新注册!')
                # register = self.find_element_by_text("快速注册")
                # time.sleep(2)
                # # 注册id = com.njzx.care:id/et_phone
                # register_text = self.find_element_by_id("com.njzx.care:id/et_phone")
                # register_text.send_keys(number)
                # time.sleep(2)
                # self.find_element_by_id("com.njzx.care:id/img_submit")
                # time.sleep(2)
                # code_text = self.find_element_by_id("com.njzx.care:id/et_code")
                # code_text.send_keys(input("请输入验证"))
                # self.find_element_by_id("com.njzx.care:id/img_submit")
                return False

            time.sleep(2)
            submit = self.find_element_by_id("com.njzx.care:id/iv_login")
            submit.click()
            time.sleep(2)
            #  提交登陆之后,判断是否登陆成功
            # 方法1:可以判断某一个元素是否存在:
            #     如:“你好,请登录”这个元素是否存在isDisplayed():
            # try:
            #     get_user_info_message = self.find_element_by_id("com.njzx.care:id/tv_helloname").isDisplayed()
            #     print("登陆成功!")
            # except Exception as e:
            #     print("登录失败!",format(e))
            #  或者使用断言assert:
            try:
                self.find_element_by_id("com.njzx.care:id/ll_userinfo").click()# 进入个人信息界面
                time.sleep(2)
                info_message = self.find_element_by_id("com.njzx.care:id/tv_title").text  #  获取到元素中的文本信息
                correct_message = "个人信息"
                assert info_message == correct_message
                print("登陆成功")
            except Exception as e:
                print("登录失败!",format(e))

            # 方法2:可以判断只有登录成功才能出现的界面,如果存在,就表明登陆成功


    testsuit_njzx.py文件中:

    # !/usr/bin/python
    # encoding:utf-8

    import unittest
    import test_case1_njzx_login
    from HTMLTestRunner import HTMLTestRunner

    #  测试用例集合:
    if __name__ == '__main__':
        suite = unittest.TestSuite()  # unittest模块中的TestSuite()创建一个对象接收testcase
        suite.addTests(unittest.TestLoader().loadTestsFromNames(['test_case1_njzx_login.test_login']))
        with open('D:/HTMLReport.html', 'wb') as f:#  模式wb
            runner = HTMLTestRunner(stream=f,
                                    title=' Test Report',
                                    description='generated by HTMLTestRunner----黄亮.',
                                    verbosity=2
                                    )
            runner.run(suite)
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]测试小兵

    40#
    发表于 2018-11-28 09:47:22 | 只看该作者
    你好,在工作的途中执行脚本的时候一直卡这里就不运行了,网上说要修改等待时间什么的,没用,您看看这是什么原因呢?
    python+appium+unittest


    appium中:
    > error: Unhandled error: TypeError: undefined is not a function
    >     at [object Object].ADB.getPIDsByName (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js:1037:8)
    >     at [object Object].ADB.killProcessesByName (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js:1079:8)
    >     at [object Object].UiAutomator.start (D:\Appium\loadspace\Appium\node_modules\appium\lib\devices\android\uiautomator.js:29:12)
    >     at [object Object].<anonymous> (D:\Appium\loadspace\Appium\node_modules\appium\lib\devices\android\android.js:115:37)
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:607:21
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:246:17
    >     at iterate (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:146:13)
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:157:25
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:248:21
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:612:34
    >     at [object Object].androidCommon.initUnicode (D:\Appium\loadspace\Appium\node_modules\appium\lib\devices\android\android-common.js:878:5)
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:607:21
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:246:17
    >     at iterate (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:146:13)
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:157:25
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:248:21
    >     at D:\Appium\loadspace\Appium\node_modules\appium\node_modules\async\lib\async.js:612:34
    >     at [object Object].<anonymous> (D:\Appium\loadspace\Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js:180:9)
    >     at ChildProcess.exithandler (child_process.js:742:7)
    >     at ChildProcess.emit (events.js:110:17)
    >     at maybeClose (child_process.js:1016:16)
    >     at Process.ChildProcess._handle.onexit (child_process.js:1088:5) context: [POST /wd/hub/session {"capabilities":{"firstMatch":[{}],"alwaysMatch":{"platformName":"Android","appium:platformVersion":"7.0","appium:deviceName":"0123456789ABCDEF:5037","appium:appPackage":"com.njzx.care","appium:appAct]


    Test_report说:
      File "D:\python\lib\http\client.py", line 297, in begin    version, status, reason = self._read_status()  File "D:\python\lib\http\client.py", line 266, in _read_status    raise RemoteDisconnected("Remote end closed connection without"urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-28 20:39
  • 签到天数: 995 天

    连续签到: 1 天

    [LV.10]测试总司令

    39#
    发表于 2018-11-26 11:01:00 | 只看该作者
    My_JIE 发表于 2018-11-22 13:33
    老师你好,用c#从零开始开发了一个自动化测试框架,请问这是什么水平?
    背后的意思,老板该给我多少工资了 ...

    自己能编写框架66666
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    38#
    发表于 2018-11-22 13:33:32 | 只看该作者
    老师你好,用c#从零开始开发了一个自动化测试框架,请问这是什么水平?
    背后的意思,老板该给我多少工资了,做出来象征性的给我涨了一千块
    工具包含了功能测试,接口测试,性能测试三个模块,可以编辑用例,导入导出用例,监控测试过程,输出测试结果。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37#
    发表于 2018-11-22 13:30:33 | 只看该作者
    老师你好,目前在学习自动化测试框架。
    Serenity、Robot Framework、RedwoodHQ、Sahi、Galen Framework、Gauge这6个主流的框架。
    我学习的编程语言是java,工具的话是 Selenium。但是框架太多,我想了解下如果目前在公司中哪种框架使用的比较多,像我这种情况的话应该怎么来学习?谢谢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    36#
    发表于 2018-11-22 13:24:12 | 只看该作者
    老师你好,我想问下一个项目中自动化测试是否能有效的展开,自动化测试框架是关键所在是在哪里?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-10 21:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    35#
    发表于 2018-11-19 15:39:38 | 只看该作者
    My_JIE 发表于 2018-11-14 10:35
    老师你好,有一个appium的问题,想请教下?
    appium 接入robot framework测试框架的问题,一直没搞明白,求助 ...

    ios不是要在mac系统下才能使用appium吗?
    因为我也穷的买不起mac,所以暂时也没法亲自验证确认答复你。
    不晓得回答是否和你的问题能对应上,不好意思了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-8-10 21:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    34#
    发表于 2018-11-19 15:36:27 | 只看该作者
    一纸荒年 发表于 2018-11-14 10:26
    您好老师,现在学习自动化测试框架 以下有几个问题想咨询下您:
    想通过junit+selenium+Coverlipse+ant来搭 ...

    论坛里有大神早在14年就发过一篇帖子,包含了你的这些问题哦。
    帮你把链接找到啦:
    http://www.51testing.com/html/32/200632-866591.html
    另外Youtube上还有视频教程,时长1小时40分,内容也是很详细的。
    不过播主是印度人,所以这英语口音听起来会比较怪怪的……
    至于怎么访问Youtube,嘿嘿,自己研究下?
    链接也发给你:
    https://www.youtube.com/watch?v=KAmII54wpAY
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-11-16 13:59
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    33#
    发表于 2018-11-16 14:26:36 | 只看该作者
    老师您好,您要是熟悉loadrunner的话可以帮帮我吗
    我在用web_reg_save_param_ex的时候,


    web_reg_save_param_ex(
    "ParamName=temp",
    "LB/IC/RE=\"id\":",
    "RB/IC/RE=,\"name\"",
    "Ordinal=all",
    SEARCH_FILTERS,
    LAST);


    已经取到我要的id值,像这样


    vuser_end.c(14): Notify: Saving Parameter "temp_43 = 778".
    vuser_end.c(14): Notify: Saving Parameter "temp_44 = 779".
    vuser_end.c(14): Notify: Saving Parameter "temp_45 = 780".
    vuser_end.c(14): Notify: Saving Parameter "temp_46 = 781".
    vuser_end.c(14): Notify: Saving Parameter "temp_count = 46".


    但是我在用的这个参数的时候出现了问题,百度上说这些参数都放在temp里,这时temp是个数组参数,然后我用lr_paramarr_idx("{temp}",i)取temp里的值取不到,log里显示temp给我传的值是 vuser_end.c(29): Notify: Parameter Substitution: parameter "temp" = "HTTP/1.1 200 OK\r\nServer: nginx\r\nDate: Fri, 16 Nov 2018 01:24:05 GMT\r\nContent-Type: image/png;charset=UTF-8\r\nContent-Length: 20431\r\nConnection: keep-alive\r\nLast-Modif 这样一大串后面还有我没复制过来,并不是我要的id值,就卡在这了,我就想问为什么temp里变成了这个呢,关联函数给我返回的到底是不是个数组
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    32#
    发表于 2018-11-14 10:35:32 | 只看该作者
    老师你好,有一个appium的问题,想请教下?
    appium 接入robot framework测试框架的问题,一直没搞明白,求助?
    由于图片放不上去,只能手写描述了。
    1. open app
    2. ${capabilities}= Create Dictionary
    3. Set To Dictionary ${capabilities} browserName ios
    4. Set To Dictionary ${capabilities} version 6.1
    5. Set To Dictionary ${capabilities} platform Mac
    6. Set To Dictionary ${capabilities} app /code/5060/ivms-5060.app
    7. open Browser \ browser = ios remote_url =http://127.0.0.1:4723/wd/hub desired_capabilities=${capabilities}
    复制代码
    运行后弹出提示信息 selenium2Library上没有browser = ios这个方法。我看了下源码,没有ios这个方法。
    请问大神们下我这个需要修改哪些地方
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-8-6 16:14
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    31#
    发表于 2018-11-14 10:26:56 | 只看该作者
    您好老师,现在学习自动化测试框架 以下有几个问题想咨询下您:
    想通过junit+selenium+Coverlipse+ant来搭建一整套自动化测试框架
    1.如何录制脚本?
    2.如何转换成junit脚本?
    3.如何生成junit日志?
    4.如何回放selenium及查看回放日志?
    5.如何查看代码的覆盖率?
    这几个问题 比较基础 覆盖面也有点广,如果老师这边有链接的话也可以给我参考下,谢谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-9-4 09:16
  • 签到天数: 246 天

    连续签到: 1 天

    [LV.8]测试军长

    30#
    发表于 2018-11-14 09:37:07 | 只看该作者
    测试乞丐 发表于 2018-11-7 14:07
    一直在思考这个问题:一个优秀的自动化测试框架应该具备哪些条件?希望嘉宾能够帮我解答这个困惑!

    上面楼主都提到了啊,我觉得总结的很好。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-9-4 09:16
  • 签到天数: 246 天

    连续签到: 1 天

    [LV.8]测试军长

    29#
    发表于 2018-11-14 09:36:56 | 只看该作者
    测试乞丐 发表于 2018-11-7 14:07
    一直在思考这个问题:一个优秀的自动化测试框架应该具备哪些条件?希望嘉宾能够帮我解答这个困惑!

    上面楼主都提到了啊,我觉得总结的很好
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-6 02:30 , Processed in 0.089144 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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