利用Selenium多用户同时开启多线程登录博客园
做自动化测试的朋友经常会遇到多终端同时做某一类的操作,最常见的当然要从登录开始做起,下面介绍利用selenium在单个浏览器开启多个线程,同时做用户登录的操作,后面会介绍多进程方式,请小伙伴们继续关注,下面开始上demo代码
1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 # @Time : 2020/5/11 22:01 4 # @Author : Tang Yiwei 5 # @Email : 892398433@qq.com 6 # @File : test_mult_user_login.py 7 # @Software: PyCharm 8 9 import threading 10 from time import sleep,time 11 from selenium import webdriver 12 from multiprocessing import current_process 13 14 15 def user_login(username,password): 16 """ 17 单终端多线程登录 18 :param username: 19 :param password: 20 :return: 21 """ 22 url = "https://account.cnblogs.com/signin" 23 driver = webdriver.Chrome(executable_path="E:\PyCharmPro\svn\mbh\drivers\chromedriver.exe") 24 procName = current_process().name 25 print("当前进程:",procName) 26 sleep(1) 27 start = time() 28 print("session_id: " + driver.session_id) 29 try: 30 driver.get(url) 31 driver.maximize_window() 32 driver.find_element_by_id("LoginName").send_keys(username) 33 sleep(1.5) 34 driver.find_element_by_id("Password").send_keys(password) 35 sleep(1.5) 36 driver.find_element_by_id("submitBtn").click() 37 except Exception as e: 38 raise e 39 finally: 40 driver.close() 41 driver.quit() 42 end = time() 43 print("Task run %0.2f seconds." % (end - start)) 44 45 def list_of_groups(list_info, per_list_len): 46 ''' 47 将列表分割成指定长度的子列表,每个列表长度为当前测试并发数 48 :param list_info: 列表,需要进行参数化的总列表 49 :param per_list_len: 每个小列表的长度 50 :return: 51 ''' 52 list_of_group = zip(*(iter(list_info),) *per_list_len) 53 end_list = [list(i) for i in list_of_group] # i is a tuple 54 count = len(list_info) % per_list_len 55 end_list.append(list_info[-count:]) if count !=0 else end_list 56 return end_list 57 58 if __name__ == '__main__': 59 userinfo = [ 60 {"username": "xiaoming", "password": "123456"}, 61 {"username": "dapeng", "password": "11223344"}, 62 {"username": "zuxiaobin", "password": "9090990"}, 63 {"username": "wangtao", "password": "4556677"} 64 ] 65 threads = [] 66 split_user_list = list_of_groups(userinfo,2) # 这里只需要修改分割的数量即可实现循环登录和并发登录的数量 67 print(split_user_list) 68 for user_list in split_user_list: 69 threads = [threading.Thread(target=user_login, args=(i["username"], i["password"])) for i in user_list] 70 71 for t in threads: 72 t.start() 73 74 for t in threads: 75 t.join()