曂沅仴駦 发表于 2024-8-4 21:27:54

自制快速冒烟测试小工具--基于python多线程

三、代码实现-封装

1. 创建包和文件夹目录
Config:存放配置文件
Driver:存放差别欣赏器驱动
TestResults:存放测试结果
TestScripts:存放步伐脚本
Util:存放封装方法
2. 将所需用到目录及文件路径单独整理
ProjVar.py
1import os
2proj_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
3conf_path = os.path.join(proj_path,"config")
4dbuser_ini_path = os.path.join(proj_path,"config","DbUser.ini")
5objectmap_ini_path = os.path.join(proj_path,"config","UiObjectMap.ini")
6driver_path = os.path.join(proj_path,"Driver")
7logger_path = os.path.join(proj_path,"config","Logger.conf")
8result_path = os.path.join(proj_path,"Testresults")
9testscript_path = os.path.join(proj_path,"TestScripts")
3. 从ini配置文件读取数据方法
ReadConfig.py
1# encoding=utf-8
2import configparser
3import os
4import platform
5from Config.ProjVar import *
6
7def read_ini_file(ini_file_path, section_name, option_name):
8    #创建一个读取配置文件的实例
9    cf = configparser.ConfigParser()
10    #将配置文件内容加载到内存
11    cf.read(ini_file_path)
12    try:
13      #根据section和option获取配置文件中的数据
14      value = cf.get(section_name, option_name)
15    except:
16      print("the specific seciton or the specific option doesn't exit!")
17      return None
18    else:
19      return value
4.获取元素对象方法
根据元素定位方式获取到对应元素对象,背面登录时会用到
ObjectMap.py
1#encoding=utf-8
2from selenium.webdriver.support.ui import WebDriverWait
3import configparser,os
4from selenium import webdriver
5from Config.ProjVar import *
6from Util.ReadConfig import read_ini_file
7
8class ObjectMap(object):
9    def __init__(self):
10      # 存放页面元素定位表达方式及定位表达式的配置文件所在绝对路径
11      self.uiObjMapPath = objectmap_ini_path
12
13    def getElementObject(self, driver, webSiteName, elementName):
14      try:
15            locators = read_ini_file(self.uiObjMapPath, webSiteName, elementName).split(">")
16            # 得到定位方式
17            locatorMethod = locators
18            # 得到定位表达式
19            locatorExpression = locators
20            print(locatorMethod, locatorExpression)
21            # 通过显示等待方式获取页面元素
22            element = WebDriverWait(driver, 10).until(lambda x: \
23                                    x.find_element(locatorMethod, locatorExpression))
24      except Exception as e:
25            raise e
26      else:
27            # 当页面元素被找到后,将该页面元素对象返回给调用者
28            return element
5. 创建一个绑定cookies的session对象
从元素定位方式配置文件获取到定位方式,然后用ObjectMap方法获取到元素对象,用selenium webdriver自动登录,登录成功后得到cookies
GetSessionOfCookie.py
1from selenium import webdriver
2import requests,time,os
3from Config.ProjVar import *
4from Util.ReadConfig import read_ini_file
5from Util.ObjectMap import *
6#from selenium.webdriver.chrome.options import Options
7
8def get_session_of_cookie(domain,url,account,password):
9    #从配置文件获取配置的浏览器类型,并对应去登录获取cookie
10    browser = read_ini_file(dbuser_ini_path, "driver", "browser")
11    if browser.lower() == "chrome":
12      driverpath = os.path.join(driver_path, "chromedriver.exe")
13      driver = webdriver.Chrome(executable_path=driverpath)
14    elif browser.lower() == "firefox":
15      driverpath = os.path.join(driver_path,"geckodriver.exe")
16      driver = webdriver.Firefox(executable_path=driverpath)
17    elif browser.lower() == "ie":
18      driverpath = os.path.join(driver_path, "IEDriverServer.exe")
19      driver = webdriver.Ie(executable_path=driverpath)
20    driver.maximize_window()
21    time.sleep(1)
22    #打开前后台登录页面
23    driver.get(url)
24    driver.implicitly_wait(5)
25    # 获取登录页面元素传值登录
26    objmap = ObjectMap()
27    if domain == "eclp":
28      objmap.getElementObject(driver, "eclp", "LoginAccount").send_keys(account)
29      objmap.getElementObject(driver, "eclp", "LoginPassword").send_keys(password)
30      objmap.getElementObject(driver, "eclp", "LoginButton").click()
31    elif domain == "uc":
32      objmap.getElementObject(driver, "uc", "LoginAccount").send_keys(account)
33      objmap.getElementObject(driver, "uc", "LoginPassword").send_keys(password)
34      objmap.getElementObject(driver, "uc", "LoginButton").click()
35    time.sleep(3)
36    #获取登录后的cookies
37    allcookies = driver.get_cookies()
38    print("获取到登录后的cookies:%s" % allcookies)
39    driver.quit()
40    #把上面获取的的cookies添加到s中
41    s = requests.session()
42    try:
43      # 添加cookies到CookieJar
44      c = requests.cookies.RequestsCookieJar()
45      for i in allcookies:
46            c.set(i["name"], i['value'])
47      # 更新session里cookies
48      s.cookies.update(c)
49    except Exception as e:
50      print(u"添加cookies报错:%s" %str(e))
51    print("查看添加后s的cookies")
52    print(s.cookies)
53    return s
6. 从数据库表查询URL
这里使用的是cx_Oracle毗连oracle,注意需要使用与python位数(32或64)对应的数据库instantclient客户端:
GetUrlFromOra.py
1import cx_Oracle
2from Util.ReadConfig import read_ini_file
3from Config.ProjVar import *
4
5def get_url_from_oracle(ip,account,password,domain):
6    db=cx_Oracle.connect(account+'/'+password+'@'+ip+'/orcl')
7    cr = db.cursor()
8    sql = ""
9    #根据是eclp还是uc来获取前端还是后端的url
10    if domain == "eclp":
11      sql = 'select sub_system_id,name,url,assert_word from eclp_uc_url where sub_system_id != 0order by id desc'
12    elif domain == "uc":
13      sql = 'select sub_system_id,name,url,assert_word from eclp_uc_url where sub_system_id = 0 order by id desc'
14    cr.execute(sql)
15    result = cr.fetchall()
16    #返回获取到的所有结果
17    return result
7. 创建存放测试结果的文件夹方法
先创建一个执行当天日期为名称的文件夹,若一天执行了多次,在日期文件夹下建一个“第n次”为名称的文件夹
1#encoding = utf-8
2import os
3import time
4from Config.ProjVar import *
5
6#创建日期格式文件夹
7def make_date_dir(dir_path):
8    if os.path.exists(dir_path):
9      #获取当前时间
10      timeTup = time.localtime()
11      #转为xxxx年xx月xx日的格式
12      currentDate = str(timeTup.tm_year) + "年" + str(timeTup.tm_mon) + "月" + str(timeTup.tm_mday) + "日"
13      #用目标目录拼接日期得到绝对路径
14      path = os.path.join(dir_path,currentDate)
15      if not os.path.exists(path):
16            os.mkdir(path)
17    else:
18      raise Exception("dir_path does not exist!")
19    return path
20
21#创建日期文件夹下多次执行的目录
22def make_report_dir():
23    #先创建一个日期格式为名称的文件夹
24    date_path = make_date_dir(result_path)
25    #判断当前目录已有文件夹数,加1得到新文件夹名并创建
26    report_path = os.path.join(date_path, "第" + str(len(os.listdir(date_path)) + 1) + "次测试")
27    os.mkdir(report_path)
28    #进入到新创建文件夹并获取当前的绝对路径,作为后面存放测试结果的文件夹
29    os.chdir(report_path)
30    result_report_path = os.getcwd()
31    return result_report_path
8. Log日志设置
使用python的Logger.conf配置文件,设置我们需要的日志级别和存放目录
9. HTML报告模板
创建一个htmlTemplate方法,里面先用HTML语言设置好本身想要的报告模板,背面将测试结果与模板拼接即可。
喜欢软件测试的小同伴们,假如我的博客对你有帮助、假如你喜欢我的博客内容,请 “点赞” “批评” “收藏” 一 键三连哦!
https://i-blog.csdnimg.cn/blog_migrate/e600d1665aae9677b1acd707c52351ce.gif

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 自制快速冒烟测试小工具--基于python多线程