阿里p8手把手教你,自动化测试应该如何实现多线程?赶紧码住

进程

 

进程就是一个程序在一个数据集上的一次动态执行过程,我们编写的程序用来描述进程要完成哪些功能以及如何完成。

线程

线程页脚轻量级进程,他是一个基本的CPU执行单元,是进程中的实现,线程的出现是为了降低上下文切换的小号,提高系统的并发性。

线程与进程

  • 一个线程只能属于一个进程,而一个进程可以有多个线程。
  • 但是少有一个线程资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  • CPU分给线程,即真正在CPU上运行的线程。

多线程原理应用

1

并行与并发

并行:每个线程分配给独立的核心,线程同时运行。

并发:多个线程在单个核心运行,统一时间一个线程运行,系统不停切换线程,看起来像是同时运行,实际上是线程不停切换。

2

Python的多线程

GIL 全局计时器锁:摸个线程想要执行必须先拿到GIL。

Python的多线程:其实同一时间只能运行一个线程,但是能实现并发。

3

Python多线程应用

不同代码运行效率不一样,我们可以通过多线程,形成并发,实现提高效率。

案例:Web自动化,其实CPU执行完一次命令,大部分时间是在等待,那么这段时间,CPU会限制或者做其他进程的任务,因此我们可以使用多线程,实现多浏览器自动化同时运行,从而实现高效率。

from appium import webdriver
from appium.webdriver.extensions.android.nativekey import AndroidKey
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.support.wait import WebDriverWait
import time
from ddt import ddt,data,unpack
import threading


data_sum = [
    {'sum_a': 2, 'sum_b': 3},
    {'sum_a': 2, 'sum_b': 3},
    {'sum_a': 5, 'sum_b': 10}
]


def run_first():
    desired_caps = {
        'platformName': 'Android',  # 被测手机是安卓
        'platformVersion': '7.1.2',  # 手机安卓版本
        'deviceName': 'xiaomi_mix',  # 设备名,安卓手机可以随意填写
        'appPackage': 'com.chinatower.fghd.customer',  # 启动APP Package名称
        'appActivity': 'com.ckd.fgbattery.activity.User_Login_Activity',  # 启动Activity名称
        'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True
        'resetKeyboard': True,  # 执行完程序恢复原来输入法
        'noReset': True,  # 不要重置App
        'newCommandTimeout': 5000,
        'UDID':'127.0.0.1:62001',
        'automationName': 'uiAutomator2'
        # 'app': r'd:\apk\bili.apk',
    }
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    #login_pwd(1,1)
    pwd = driver.find_element_by_xpath('//*[@text = "密码登录"]')
    print(pwd.get_attribute('text'))
    TouchAction(driver).tap(pwd).perform()
    pwd.click()
    driver.find_element_by_id("user_phone_et").send_keys('1')
    driver.find_element_by_id("sms_code_et").send_keys('1')
    driver.find_element_by_id("btn_res").click()
    # 登录错误时,无法跳转进入页面
    try:
        WebDriverWait(driver, 3, 1).until(lambda x: x.find_element_by_xpath("//*[@text='扫码换电']"))
        scan = driver.find_elements_by_xpath("//*[@text='扫码换电']")
        if scan:
            print("登录成功")
            return True
    except:
        print("登录失败")
        return False




def run_two():
    desired_caps_and5 = {
        'platformName': 'Android',  # 被测手机是安卓
        'platformVersion': '5.1.1',  # 手机安卓版本
        'deviceName': 'HuaWei P30',  # 设备名,安卓手机可以随意填写
        'appPackage': 'com.chinatower.fghd.customer',  # 启动APP Package名称
        'appActivity': 'com.ckd.fgbattery.activity.User_Login_Activity',  # 启动Activity名称
        'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True
        'resetKeyboard': True,  # 执行完程序恢复原来输入法
        'noReset': True,  # 不要重置App
        'newCommandTimeout': 5000,
        'UDID':'127.0.0.1:62026',
        'automationName': 'uiAutomator2'
        # 'app': r'd:\apk\bili.apk',
    }
    driver2 = webdriver.Remote('http://localhost:4725/wd/hub', desired_caps_and5)
    #login_pwd(2,2)
    time.sleep(10)
    print("第二个")
    pwd = driver2.find_element_by_xpath('//*[@text = "密码登录"]')
    print(pwd.get_attribute('text'))
    TouchAction(driver2).tap(pwd).perform()
    pwd.click()
    driver2.find_element_by_id("user_phone_et").send_keys('1')
    driver2.find_element_by_id("sms_code_et").send_keys('2')
    driver2.find_element_by_id("btn_res").click()
    # 登录错误时,无法跳转进入页面
    try:
        WebDriverWait(driver2, 3, 1).until(lambda x: x.find_element_by_xpath("//*[@text='扫码换电']"))
        scan = driver2.find_elements_by_xpath("//*[@text='扫码换电']")
        if scan:
            print("登录成功")
            return True
    except:
        print("登录失败")
        return False


    # @data(*data_sum)
    # @unpack
# def login_pwd(sum_a,sum_b):
#         pwd = driver.find_element_by_xpath('//*[@text = "密码登录"]')
#         print(pwd.get_attribute('text'))
#         TouchAction(self.driver).tap(pwd).perform()
#         pwd.click()
#         driver.find_element_by_id("user_phone_et").send_keys(sum_a)
#         driver.find_element_by_id("sms_code_et").send_keys(sum_b)
#         driver.find_element_by_id("btn_res").click()
#         # 登录错误时,无法跳转进入页面
#         try:
#             WebDriverWait(driver, 3, 1).until(lambda x: x.find_element_by_xpath("//*[@text='扫码换电']"))
#             scan = driver.find_elements_by_xpath("//*[@text='扫码换电']")
#             if scan:
#                 print("登录成功")
#                 return True
#         except:
#             print("登录失败")
#             return False


#
# # 连接Appium Server,初始化自动化环境
# driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# driver_p = webdriver.Remote('http://localhost:4725/wd/hub', desired_caps_and5)
#
# login_pwd(driver,1,1)
# login_pwd(driver_p,2,2)


if __name__ == '__main__':
    t1 = threading.Thread(target=run_first,name = 'thread1')
    t2 = threading.Thread(target=run_two,name='thread2')
    start_time = time.time()
    t1.start()
    t1.join()
    t2.start()
    print("当前活跃的线程有:{}".format(threading.current_thread()))


    print("正在运行的所有线程:{}".format(threading.enumerate()))


    print("正在运行的线程数量:{}".format(threading.active_count()))


    t2.join()
    end_time = time.time()
    print("程序运行耗时:{}".format(end_time - start_time))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值