• 一点一点学 Appium 的使用 at 2018年05月18日

    什么时候开课啊,是网络课程吗?😀

  • 目前使用了一种替代方案实现了缩放,结合 MultiAction和TouchAction。

    滑动原理图解

    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']
    
    
    
    # 放大
    def zoom():
        action1 = TouchAction(driver)
        action2 = TouchAction(driver)
        zoom_action = MultiAction(driver)
    
        action1.press(x=x*0.4, y=y*0.4).move_to(x=x*0.1, y=y*0.1).wait(500).release()
        action2.press(x=x*0.6, y=y*0.6).move_to(x=x*0.8, y=y*0.8).wait(500).release()
    
        print('start zoom...')
        zoom_action.add(action1, action2)
        zoom_action.perform()
    
    
    
    # 缩小
    def pinch():
        action1=TouchAction(driver)
        action2=TouchAction(driver)
        pinch_action=MultiAction(driver)
    
        action1.press(x=x*0.1, y=y*0.1).move_to(x=x*0.4, y=y*0.4).wait(500).release()
        action2.press(x=x*0.8, y=y*0.8).move_to(x=x*0.6, y=y*0.6).wait(500).release()
    
        print("start pinch...")
        pinch_action.add(action1, action2)
        pinch_action.perform()
    
  • 补充一下测试环境:

    测试环境

    • 夜神模拟器 Android 5.1.1
    • 百度地图Android app V10.6.5
    • Win 10 64bit
    • Appium 1.7.2
  • 你用的是什么模拟器啊,建议你重启下Appium服务和模拟器看看。

  • 使用appium-doctor先做个全面体检吧:
    1.安装appium-doctor: npm install appium-doctor -g
    2.在控制台输入命令:appium-doctor 看到如下提示说明整体环境配置成功。

    C:\Users\Shuqing>appium-doctor
    info AppiumDoctor Appium Doctor v.1.4.3
    info AppiumDoctor ### Diagnostic starting ###
    info AppiumDoctor   The Node.js binary was found at: D:\program files\nodejs\node.exe
    info AppiumDoctor   Node version is 6.11.3
    info AppiumDoctor   ANDROID_HOME is set to: E:\Andriod_sdk
    info AppiumDoctor   JAVA_HOME is set to: C:\Program Files\Java\jdk1.8.0_05
    info AppiumDoctor   adb exists at: E:\Andriod_sdk\platform-tools\adb.exe
    info AppiumDoctor   android exists at: E:\Andriod_sdk\tools\android.bat
    info AppiumDoctor   emulator exists at: E:\Andriod_sdk\tools\emulator.exe
    info AppiumDoctor   Bin directory of %JAVA_HOME% is set
    info AppiumDoctor ### Diagnostic completed, no fix needed. ###
    info AppiumDoctor
    info AppiumDoctor Everything looks good, bye!
    info AppiumDoctor
    
    
  • 来,围观一下多个线程同时操作一个变量怎么把内容给改乱了的。。。😂

    import time, threading
    
    # 假定这是你的银行存款:
    balance = 0
    
    def change_it(n):
        # 先存后取,结果应该为0:
        global balance
        balance = balance + n
        balance = balance - n
    
    def run_thread(n):
        for i in range(100000):
            change_it(n)
    
    t1 = threading.Thread(target=run_thread, args=(5,))
    t2 = threading.Thread(target=run_thread, args=(8,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print balance
    

    定义了一个共享变量balance,初始值为0,并且启动两个线程,先存后取,理论上结果应该为0,但是,由于线程的调度是由操作系统决定的,当t1、t2交替执行时,只要循环次数足够多,balance的结果就不一定是0了。

    Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。

    GIL是Python解释器设计的历史遗留问题,通常我们用的解释器是官方实现的CPython,要真正利用多核,除非重写一个不带GIL的解释器。

    所以,在Python中,可以使用多线程,但不要指望能有效利用多核。如果一定要通过多线程利用多核,那只能通过C扩展来实现,不过这样就失去了Python简单易用的特点。

    内容搬运来源:多线程-廖雪峰

  • 这个是由于你的toast内容为中文,由于字符编解码问题导致不能识别,需要在代码顶部写注释如下即可

    # coding=utf-8
    
  • 站在测试角度我觉得选自己最能上手的语言完成就好,就拿我之前公司产品来说底层是C,C++ ,应用层是C#来开发的。我不能能花大量时间把C++,C#语言学习精通(而且光C++这门语言门槛就不低了)。

  • 首先将各个功能模块进行独立封装,比如封装登录操作def login():, 退出操作:def logout():
    。伪代码如下:

    
    def login():
    def logout():
    
    

    然后你接下来要设计的测试用例是先登录再退出,就可以再封装一个方法比如 def test_loginout_action() 在这个方法先调用登录,再调用退出。

    def test_loginout_action()
        def login():
        def logout():
    
  • 外包现在确实不值得去了,最主要还是扎扎实实提高自身实力。

爱技术,爱折腾。