原标题:自制快速冒烟测试小工具--基于python多线程(2)

新书

速递

文 |愈知愈无知

快速冒烟测试小工具-(1)分析及准备

三、代码实现-封装

1. 创建包和文件夹目录

Config:存放配置文件

Driver:存放不同浏览器驱动

TestResults:存放测试结果

Tests:存放程序脚本

Util:存放封装方法

2. 将所需用到目录及文件路径单独整理

ProjVar.py

1importos

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")

9test_path = os.path.join(proj_path,"Tests")

3. 从ini配置文件读取数据方法

ReadConfig.py

1# encoding=utf-8

2importconfigparser

3importos

4importplatform

5fromConfig.ProjVar import*

6

7defread_ini_file(ini_file_path, section_name, option_name):

8#创建一个读取配置文件的实例

9cf = configparser.ConfigParser

10#将配置文件内容加载到内存

11cf.read(ini_file_path)

12try:

13#根据section和option获取配置文件中的数据

14value = cf.get(section_name, option_name)

15except:

16print( "the specific seciton or the specific option doesn't exit!")

17returnNone

18else:

19returnvalue

4.获取元素对象方法

ObjectMap.py

1#encoding=utf-8

2fromselenium.webdriver.support.ui importWebDriverWait

3importconfigparser,os

4fromselenium importwebdriver

5fromConfig.ProjVar import*

6fromUtil.ReadConfig importread_ini_file

7

8classObjectMap(object):

9def__init__(self):

10# 存放页面元素定位表达方式及定位表达式的配置文件所在绝对路径

11self.uiObjMapPath = objectmap_ini_path

12

13defgetElementObject(self, driver, webSiteName, elementName):

14try:

15locators = read_ini_file(self.uiObjMapPath, webSiteName, elementName).split( ">")

16# 得到定位方式

17locatorMethod = locators[ 0]

18# 得到定位表达式

19locatorExpression = locators[ 1]

20print(locatorMethod, locatorExpression)

21# 通过显示等待方式获取页面元素

22element = WebDriverWait(driver, 10).until( lambdax:

23x.find_element(locatorMethod, locatorExpression))

24exceptException ase:

25raisee

26else:

27# 当页面元素被找到后,将该页面元素对象返回给调用者

28returnelement

5. 建立一个绑定cookies的session对象

从元素定位方式配置文件获取到定位方式,然后用ObjectMap方法获取到元素对象,用selenium webdriver自动登录,登录成功后得到cookies

GetSessionOfCookie.py

1fromselenium importwebdriver

2importrequests,time,os

3fromConfig.ProjVar import*

4fromUtil.ReadConfig importread_ini_file

5fromUtil.ObjectMap import*

6#from selenium.webdriver.chrome.options import Options

7

8defget_session_of_cookie(domain,url,account,password):

9#从配置文件获取配置的浏览器类型,并对应去登录获取cookie

10browser = read_ini_file(dbuser_ini_path, "driver", "browser")

11ifbrowser.lower == "chrome":

12driverpath = os.path.join(driver_path, "chromedriver.exe")

13driver = webdriver.Chrome(executable_path=driverpath)

14elifbrowser.lower == "firefox":

15driverpath = os.path.join(driver_path, "geckodriver.exe")

16driver = webdriver.Firefox(executable_path=driverpath)

17elifbrowser.lower == "ie":

18driverpath = os.path.join(driver_path, "IEDriverServer.exe")

19driver = webdriver.Ie(executable_path=driverpath)

20driver.maximize_window

21time.sleep( 1)

22#打开前后台登录页面

23driver.get(url)

24driver.implicitly_wait( 5)

25# 获取登录页面元素传值登录

26objmap = ObjectMap

27ifdomain == "eclp":

28objmap.getElementObject(driver, "eclp", "LoginAccount").send_keys(account)

29objmap.getElementObject(driver, "eclp", "LoginPassword").send_keys(password)

30objmap.getElementObject(driver, "eclp", "LoginButton").click

31elifdomain == "uc":

32objmap.getElementObject(driver, "uc", "LoginAccount").send_keys(account)

33objmap.getElementObject(driver, "uc", "LoginPassword").send_keys(password)

34objmap.getElementObject(driver, "uc", "LoginButton").click

35time.sleep( 3)

36#获取登录后的cookies

37allcookies = driver.get_cookies

38print( "获取到登录后的cookies:%s"% allcookies)

39driver.quit

40#把上面获取的的cookies添加到s中

41s = requests.session

42try:

43# 添加cookies到CookieJar

44c = requests.cookies.RequestsCookieJar

45fori inallcookies:

46c.set(i[ "name"], i[ 'value'])

47# 更新session里cookies

48s.cookies.update(c)

49exceptException ase:

50print( u"添加cookies报错:%s"%str(e))

51print( "查看添加后s的cookies")

52print(s.cookies)

53returns

6. 从数据库表查询URL

这里使用的是cx_Oracle连接oracle,注意需要使用与python位数(32或64)对应的数据库instantclient客户端:

GetUrlFromOra.py

1importcx_Oracle

2fromUtil.ReadConfig importread_ini_file

3fromConfig.ProjVar import*

4

5defget_url_from_oracle(ip,account,password,domain):

6db=cx_Oracle.connect(account+ '/'+password+ '@'+ip+ '/orcl')

7cr = db.cursor

8sql = ""

9#根据是eclp还是uc来获取前端还是后端的url

10ifdomain == "eclp":

11sql = 'select sub_system_id,name,url,assert_word from eclp_uc_url where sub_system_id != 0 order by id desc'

12elifdomain == "uc":

13sql = 'select sub_system_id,name,url,assert_word from eclp_uc_url where sub_system_id = 0 order by id desc'

14cr.execute(sql)

15result = cr.fetchall

16#返回获取到的所有结果

17returnresult

7. 创建存放测试结果的文件夹方法

先创建一个执行当天日期为名称的文件夹,若一天执行了多次,在日期文件夹下建一个“第n次”为名称的文件夹

1#encoding = utf-8

2importos

3importtime

4fromConfig.ProjVar import*

5

6#创建日期格式文件夹

7defmake_date_dir(dir_path):

8ifos.path.exists(dir_path):

9#获取当前时间

10timeTup = time.localtime

11#转为xxxx年xx月xx日的格式

12currentDate = str(timeTup.tm_year) + "年"+ str(timeTup.tm_mon) + "月"+ str(timeTup.tm_mday) + "日"

13#用目标目录拼接日期得到绝对路径

14path = os.path.join(dir_path,currentDate)

15ifnotos.path.exists(path):

16os.mkdir(path)

17else:

18raiseException( "dir_path does not exist!")

19returnpath

20

21#创建日期文件夹下多次执行的目录

22defmake_report_dir:

23#先创建一个日期格式为名称的文件夹

24date_path = make_date_dir(result_path)

25#判断当前目录已有文件夹数,加1得到新文件夹名并创建

26report_path = os.path.join(date_path, "第"+ str(len(os.listdir(date_path)) + 1) + "次测试")

27os.mkdir(report_path)

28#进入到新创建文件夹并获取当前的绝对路径,作为后面存放测试结果的文件夹

29os.chdir(report_path)

30result_report_path = os.getcwd

31returnresult_report_path

8. Log日志设置

使用python的Logger.conf配置文件,设置我们需要的日志级别和存放目录

9. HTML报告模板

创建一个htmlTemplate方法,里面先用HTML语言设置好自己想要的报告模板,后面将测试结果与模板拼接即可。返回搜狐,查看更多

责任编辑:

python做测试小工具_自制快速冒烟测试小工具--基于python多线程(2)相关推荐

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

    前言 在项目测试的过程中,发现经常会有下面这些情况: •新版本升级后,有时会因为代码或部署时配置错误,某个菜单报类似404或500的错误: •为避免以上问题,实施部署人员升级完后,需要手动冒烟一遍所有 ...

  2. 用python做简单的题目_「每日一练」巧用python做小学的数学题

    原标题:「每日一练」巧用python做小学的数学题 很多的小学问题其实已经比较复杂了,我们运用传统的算法,可能会比较难以理解,这里我们可以巧用Python来完成一些小学题目的计算! 下边我们就一起来看 ...

  3. python如何和硬件相结合_让创意照进现实,基于Python编程软硬件结合教学

    2020年12月11日上午,南京市高中信息技术教研活动在南京师范大学附属扬子中学成功开展.本次活动以"让创意照进现实,基于Python编程软硬件结合教学"为主题,通过研究课和课后交 ...

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

    三.代码实现-封装 1. 创建包和文件夹目录 Config:存放配置文件 Driver:存放不同浏览器驱动 TestResults:存放测试结果 TestScripts:存放程序脚本 Util:存放封 ...

  5. python智能机器人设计与实现_从AI模型到智能机器人:基于Python与TensorFlow

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  6. python建模分析实操_城市公交站点设置优化模型-基于Python

    城市公交站点设置的优化分析 一.模型应用 进入21世纪以来,我国城市公共交通飞速发展,然而随着经济社会发展,城市不断升级以及人民生活品质越来越好,城市交通拥堵.出行不便等问题日益突出,严重损坏了市民日 ...

  7. python变量快速学习_如何快速的复习学习过的Python

    在持续学习Python的过程中,我们可能会因为某些因素而在一段时间内没有接触Python.那么我们如何快速的复习一下曾经学过的 python 呢? 语法/变量/表达式 也许我们能找到一个小小例子来快速 ...

  8. [学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程

    文章目录 视频资料: 思维导图 一.Spark基础入门(环境搭建.入门概念) 第二章:Spark环境搭建-Local 2.1 课程服务器环境 2.2 Local模式基本原理 2.3 安装包下载 2.4 ...

  9. python做淘宝_我用 python 做了款可开淘宝店赚钱的工具!

    摘要:撩了淘宝店家后,用 Python 做了这个. 批量更换证件照背景色工具 私信小编01 获取本项目源代码哦! 之前给大家介绍了一款 AI 抠图神器:Remove.bg ,使用 Python 调用 ...

最新文章

  1. 干货!我的计算机网络怎么考了 100 分的?
  2. 什么行业需要java_java开发可以从事什么行业
  3. 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛B: Out-out-control cars
  4. 子空间:群论的角度解释无监督深度学习
  5. LeetCode 217. 存在重复元素(哈希)
  6. 计算机组成原理——第七章
  7. ma2灯光控制台 linux,MA2灯光控制台简易教程.pdf
  8. Word批量转PDF/图片
  9. xss-labs靶场全通关
  10. Android实用视图动画及工具系列之六:通用表情栏,仿QQ微信聊天弹出表情选框
  11. 清理winsxs的小工具
  12. 华为究竟做了多少芯片?
  13. ## 看看sass和less会遇到的问题吧
  14. windows上datax的使用记录
  15. 手机短信验证码注册-短信平台验证码开发6
  16. Android 之路43---手风琴特效ExpandableListView
  17. 数据库触发器(转自http://blog.csdn.net/chinayuan/article/details/6292335/#)
  18. 如何删掉讨厌的企业qq的小尾巴-金山安全助手
  19. 扣除非经常性损益后的归属母公司所有者的净利润怎么算
  20. 关于列表,网格显示一律使用RV

热门文章

  1. 揭露“番茄花园版”侵权物的本质
  2. 【分享】免费的国际一级域名和100M支持asp、cgi空间
  3. 元数据管理-技术元数据解决方案
  4. 【编程题】【Scratch二级】2022.03 魔法星空
  5. memcpy()详解
  6. kibana java_Kibana安装及使用说明
  7. 【JWT】什么是JWT?
  8. win10蓝屏代码_?联想电脑蓝屏的解决方法教程
  9. 好用的vue瀑布流插件-vue-masonry
  10. 高等工程数学 —— 第一章 (1)距离与范数