首页 文章 精选 留言 我的

精选列表

搜索[诊断自动化],共10000篇文章
优秀的个人博客,低调大师

自动合并Excel的4种方法,pandas自动化办公,YYDS

大家好,这里是程序员晚枫。 上次我们通过阅读源码,分享了:官方推荐:6种Pandas读取Excel的方法,太方便了~ 今天我们继续阅读源码,学一个实用技巧:如何2个excel里的合并数据? 每个方法都配了一张合并效果图,建议小白直接看图,有不理解的再配合文字阅读。 以下方法,按照从易到难排序。有些方法文字描述起来比较抽象,但看图一定可以秒懂~ 一、源码解析 通过研究源码可以发现,除去被淘汰的append方法,目前通用的合并方法一共有4个, concat、merge,来自源码的./pandas/core/reshape文件夹,是pandas本身可以调用的; join、combine,来自源码的./pandas/core/frame.py文件,是只能由dataframe调用的。 每种方法都有复杂的用法,本文主要是入门引导性说明。 所以每种方法只给大家介绍一个最容易理解的效果,如果想深入学习,可以在评论区进行讨论~ 二、方法说明 1、concat 对2个有着相同列名的excel表格,进行上下拼接式的合并。 应用场景 当我想把自己所有平台账号的基本信息,汇总到一个表格里。如下图所示,一行代码完成合并。👇 append(已经被淘汰了!!) 这个方法很多文章都在介绍。 其实它和concat效果一模一样,而且pandas官方在源码里明确提示了:这个方法即将在新的pandas版本里淘汰,不要使用了,请直接使用concat方法。 FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead. 下次再看到有介绍pandas用append方法进行合并的文章,你知道该怎么做了吧? 2、merge merge合并稍微复杂一点。 我们举个简单的例子: 在同一行里,罗列出我所有平台的关注数,如下图所示。👇 merge更关心列之间的合并。 3、join 如上文所述,join是对数据的精细化操作。 例如我有的文件有2行,有的文件有1行,但是他们的格式是一样的,我想对它们进行横向的拼接。有些文件没有第2行的情况下,自动填充空白,方便我的后续操作。如下图所示👇 join更关心行之间的合并。 4、combine 这是一个最复杂的方法,因为它需要在合并时进行计算。 例子 我想看一下哪天的微博浏览量最少,于是在合并的同时,进行了大小比较的计算。如下图所示👇combine在合并的同时,对数据列进行了比较、计算。 三、写在最后 以上就是使用pandas进行合并的4个常用方法了。 近期还会发布若干个1行代码合并Excel的极简操作,大家可以关注一下我,收到最新消息。

优秀的个人博客,低调大师

华为网络自动化编程 之 gRPC 方式获取交换机信息

### 实验环境 1.配置交换机ssh登录 2.实验拓扑 ![image.png](https://s2.51cto.com/images/20210610/1623299211124282.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ### 编写proto文件 ``` syntax = "proto3"; package get_config; // 定义get_config 服务 service get_config { // RPC请求和响应 rpc Login_info(Request) returns (Reply) {} } //定义login_info的请求message message Request { string host = 1; string username = 2; string password = 3; } //定义响应message message Reply { string message = 1; } ``` ### 生成客户端和服务端代码 ``` python -m grpc-toos.protoc -I ./ --python_out=. --grpc_python_out=. ./get_config.proto ``` ### 编写服务端代码 ```python # grpc_service.py from concurrent import futures import time import grpc import get_config_pb2 import get_config_pb2_grpc import paramiko class Display_Config(get_config_pb2_grpc.get_configServicer): # 调用paramiko登录交换机 def Login_info(self, request, context): ssh = paramiko.client.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=request.host, port=22, username=request.username, password=request.password) cli = ssh.invoke_shell() cli.send('N\n') time.sleep(0.5) cli.send('screen-length 0 temporary\n') time.sleep(0.5) cli.send('display cu\n') time.sleep(3) data = cli.recv(999999).decode() ssh.close() return get_config_pb2.Reply(message=data) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) get_config_pb2_grpc.add_get_configServicer_to_server(Display_Config(), server) server.add_insecure_port('localhost:8080') server.start() _ONE_DAY_IN_SECONDS = 60*60*24 try: while True: time.sleep(_ONE_DAY_IN_SECONDS) except KeyboardInterrupt: server.stop() if __name__ == "__main__": serve() ``` ### 编写客户端代码 ```python # grpc_client.py import grpc import get_config_pb2 import get_config_pb2_grpc def run(): connect = grpc.insecure_channel('localhost:8080') stub = get_config_pb2_grpc.get_configStub(channel=connect) response = stub.Login_info( get_config_pb2.Request(host='172.16.1.3', username='python', password='Huawei12#$') ) print(response.message) if __name__ == "__main__": run() ``` ### 运行服务端代码 ``` python grpc_service.py ``` ### 运行客户端 ``` python grpc_client.py 注意:需要先运行服务端代码,否则可能会导致服务不可达的错误。 ``` ### 实验效果截图 ![image.png](https://s2.51cto.com/images/20210610/1623303507217523.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ![image.png](https://s2.51cto.com/images/20210610/1623303609316870.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

优秀的个人博客,低调大师

Selenium自动化测试框架全网最祥讲解!!! 【一篇足矣】

前言:安装两个所用插件!第一个:谷歌浏览器chromedriver! 第二个:phantomjs***面浏览器(是基于webkit浏览器引擎的浏览器)!点我官网安装跳转! 1.selenium的作用和工作原理 (开发使用有头浏览器,部署使用***面浏览器) selenium模块安装: pip install selenium driver浏览器引擎安装: 安装driver(根据获取浏览器版本安装浏览器引擎) 步骤: 1.获取当前浏览器版本(谷歌为例:帮助里面) 2.访问:https://npm.taobao.org/mirrors/chromedriver 下载对应的driver版本 3.解压,获取可执行文件 windows为chromedriver.exe linux/mac为chromedriver 4.chromedriver环境配置 Windows环境下,需要将chromedriver.exe所在的目录设置为path环境变量中的路径 linux/mac环境下,将chromedriver所在的目录设置到系统的PATH环境值中 简单使用selenium: 解析: 1.webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe")中executable参数指定的是下载好的chromedriver文件路径 2.driver.find_element_by_id('kw').send_keys('美女图片')定位id属性值是‘kw’的标签,并向其中输入字符串‘美女图片’ 3.driver.find_element_by_id('su').click()定位id属性值是su的标签,并点击 click函数的作用是:触发标签的js的click事件 2.WebDriver操作浏览器的方式 # 最大化浏览器 driver.maximize_window() # 刷新 driver.refresh() # 后退 driver.back() # 前进 driver.forward() # 设置浏览器大小 driver.set_window_size(300,300) # 设置浏览器位置 driver.set_window_position(300,200) # 关闭浏览器单个窗口 driver.close() # 关闭浏览器所有窗口 driver.quit() 3.WebDriver其他常用方法 1. size 返回节点的大小,也就是宽高 2. text 获取元素的文本 3. title 获取页面title 4. current_url 获取当前页面URL 5. get_attribute("xxx") 获取属性值;xxx:要获取的属性 6. is_display() 判断元素是否可见 7. is_enabled() 判断元素是否可用 8. location 获取节点在页面中的相对位置 9. tag_name 获取标签名称 提示: 10. size、text、title、current_url:为属性,调用时无括号;如:xxx.size 11. title、current_url:使用浏览器实例化对象直接调用; 如: driver.title # 获取输入文本框大小 size=driver.find_element_by_id("userA").size print('size:',size) # 获取a标签内容 text=driver.find_element_by_id("fwA").text print('a标签text:',text) # 获取title title=driver.title print('title:',title) # 获取当前页面url url=driver.current_url print('url:',url) # 获取a标签href属性值 href=driver.find_element_by_id("fwA").get_attribute("href") print('href属性值为:',href) # 判断span是否显示 display=driver.find_element_by_css_selector('span').is_displayed() print('span标签是否显示:',display) # 判断取消按钮是否可用 enabled=driver.find_element_by_id('cancelA').is_enabled() print('取消按钮是否可用:',enabled) 4.driver对象的常用属性和方法 driver.page_source 当前标签页浏览器渲染之后的网页源代码 driver.current_url 当前标签页的url driver.close() 关闭当前标签页,如果只有一个标签页则关闭整个浏览器 driver.quit() 关闭浏览器 driver.forward() 页面前进 driver.back() 页面后退 driver.screen_shot(img_name) 页面截图(现版本已移除此功能!) 实战:连续访问三个页面,然后调用back()方法回到第二个页面,接下来再调用forward()方法又可以前进到第三个页面! import time from selenium import webdriver browser = webdriver.Chrome() browser.get('https://www.baidu.com') browser.get('https://taobao.com') browser.get('https://www.python.org') browser.back() time.sleep(1) browser.forward() browser.close() 5.driver对象定位标签元素获取标签对象的方法 find_element_by_id 返回一个元素 find_element(s)_by_class_name 根据类名获取元素列表 find_element(s)_by_name 根据标签的name属性值返回包含标签对象元素的列表 find_element(s)_by_xpath 返回一个包含元素的列表 find_element(s)_by_link_text 根据连接文本获取元素列表 find_element(s)_by_partial_link_text 根据链接包含的文本获取元素列表 find_element(s)_by_tag_name 根据标签名获取元素列表 find_element(s)_by_css_selector 根据css选择器来获取元素列表 解析: ①find_element和find_elements的区别: 多了个s就返回列表,没有s就返回匹配到的第一个标签对象 find_element匹配不到就抛出异常,find_elements匹配不到就返回空列表 ②by_link_text和by_partial_link_text的区别:全部文本和包含某个文本 ③以上函数的使用方法: driver.find_element_by_id('id_str') 6.WebDriver操作鼠标方法 1. context_click() 右击 --> 此方法模拟鼠标右键点击效果 2. double_click() 双击 --> 此方法模拟双标双击效果 3. drag_and_drop() 拖动 --> 此方法模拟双标拖动效果 4. move_to_element() 悬停 --> 此方法模拟鼠标悬停效果 5. perform() 执行 --> 此方法用来执行以上所有鼠标方法 示例: 1. 导包:from selenium.webdriver.common.action_chains import ActionChains 2. 实例化ActionChains对象:Action=ActionChains(driver) 3. 调用右键方法:element=Action.context_click(username) 4. 执行:element.perform() 示例: # 定位用户名 element=driver.find_element_by_id("userA") # 输入用户名 element.send_keys("admin1") # 删除1 element.send_keys(Keys.BACK_SPACE) # 全选 element.send_keys(Keys.CONTROL,'a') # 复制 element.send_keys(Keys.CONTROL,'c') # 粘贴 driver.find_element_by_id('passwordA').send_keys(Keys.CONTROL,'v') 7.标签对象提取文本内容和属性值 获取文本 element.text: 通过定位获取的标签对象的 text 属性,获取文本内容 获取属性值 element.get_attribute('属性名'): 通过定位获取的标签对象的 get_attribute 函数,传入属性名,来获取属性的值 8.selenium控制标签页的切换 窗口切换: 获取所有标签页的窗口句柄 利用窗口句柄字切换到句柄指向的标签页 窗口句柄:指的是指向标签页对象的标识 解析: #1.获取当前所有的标签页的句柄构成的列表 current_windows = driver.window_handles #2.根据标签页句柄列表索引下标进行切换 driver.switch_to.window(windows[0]) 代码使用: import time from selenium import webdriver driver=webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe") driver.get('https://www.baidu.com/') time.sleep(1) driver.find_element_by_id('kw').send_keys('python') time.sleep(1) driver.find_element_by_id('su').click() time.sleep(1) # 通过执行js来新开一个标签页 js = "window.open('https://www.sougou.com');" driver.execute_script(js) time.sleep(1) # 1.获取当前所有的窗口 windows = driver.window_handles time.sleep(2) # 2.根据窗口索引进行切换 driver.switch_to.window(windows[0]) time.sleep(2) driver.switch_to.window(windows[1]) time.sleep(6) driver.quit() 9.selenium控制iframe的切换 iframe是html中常用的一种技术,即一个页面中嵌套了另一个网页,selenium默认是访问不了frame中的内容的,对应的解决思路是driver.switch_to.frame(frame_element)。 第一部分:基操! 实际例子:进行QQ空间登录!难点:无法解决登录过程中出现iframe,即此页面中嵌套了登录网页! 切换到定位的frame标签嵌套的页面中: driver.switch_to.frame(通过find_element_by函数定位的frame、iframe标签对象) import time from selenium import webdriver driver=webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe") driver.get('https://qzone.qq.com/') time.sleep(2) driver.switch_to.frame('login_frame') # 转向到登录frame中 driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click() # driver.find_element_by_id('u').send_keys('QQ号') # 更保险的操作 driver.find_element_by_xpath('//*[@id="u"]').send_keys('QQ号') driver.find_element_by_xpath('//*[@id="p"]').send_keys('密码') driver.find_element_by_id('login_button').click() # 小拓展:如何在F12中简单正确的获取定位想要元素的xpath语法: # F12检查-->右击copy-->copy_xpath语法 driver.quit() 第二部分:骚操作! 1. 跳回最外层的页面 driver.switch_to.default_content() -- 切换到最外层(对于多层页面,可通过该方法直接切换到最外层) 2. 跳回上层的页面 driver.switch_to.parent_frame() -- 进行向上的单层切换 3.利用切换标签页的方式切出frame标签 windows = driver.window_handles driver.switch_to.window(windows[0]) 实际例子:进行QQ邮箱的登录操作以及frame标签的切出操作! import time from selenium import webdriver driver=webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe") url = 'https://mail.qq.com/cgi-bin/loginpage' driver.get(url) time.sleep(2) login_frame = driver.find_element_by_id('login_frame') # 根据id定位frame元素 driver.switch_to.frame('login_frame') # 转向到登录frame中 driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click() driver.find_element_by_xpath('//*[@id="u"]').send_keys('QQ号@qq.com') time.sleep(2) driver.find_element_by_xpath('//*[@id="p"]').send_keys('密码') time.sleep(2) # driver.find_element_by_xpath('//*[@id="login_button"]').click() # time.sleep(2) """操作frame外边的元素需要切换出去""" windows = driver.window_handles driver.switch_to.window(windows[0]) # 进行初始页面内元素的操作 content = driver.find_element_by_class_name('login_pictures_title').text print(content) # driver.quit() 10.利用selenium获取cookie的方法 获取cookie: driver.get_cookies() 返回列表,其中包含的是完整的cookie信息,需要转换为字典 字典推导式转换: cookies_dict = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()} 删除cookie: ①删除一条cookie: driver.delete_cookie('cookie_name') ②删除所有的cookie: driver.delete_all_cookies() ③添加一条cookie: driver.add_cookie({'name': 'python', 'value': 'good'}) 11.页面等待 分类: 1.强制等待 time.sleep() 缺点:不智能,设置的时间太短,元素还没有加载出来,设置的时间太长,浪费时间 2.隐式等待 针对元素定位,隐式等待设置了一个时间,在一段时间内判断元素是否定位成功,如果完成了,就进行下一步 在设置时间内没有定位成功,则会报超时加载 代码使用示例:通过隐式等待获取百度首页特定元素的属性! from selenium import webdriver driver=webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe") url = 'https://www.baidu.com/' # 设置之后的所有元素定位操作都有最大等待时间10S,在10S内会定期进行元素定位,超时则抛出找不到节点的异常 # 换句话说,当查找节点而节点并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认的时间是0。 driver.implicitly_wait(10) driver.get(url) el = driver.find_element_by_xpath('//*[@id="lg"]/img[1]') print(el) 3.显示等待 明确等待某一个元素,超时则报异常 代码使用示例:通过显示等待实现百度首页特定元素属性的获取! from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver=webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe") url = 'https://www.baidu.com/' driver.get(url) # 显示等待 WebDriverWait(driver, 20, 0.5).until( EC.presence_of_element_located( (By.LINK_TEXT, 'hao123') ) ) ''' 参数20表示最长等待20S 参数0.5表示0.5S检查一次规定的标签是否存在 EC.presence_of_element_located( (By.LINK_TEXT, 'hao123') ) EC表示要等待的条件,此处传入了presence_of_element_located这个条件,代表节点出现的意思。 其参数是节点的定位元组,也就是链接文本内容为hao123的节点。 每0.5S检查一次,通过链接文本定位标签是否存在,如果存在就向下继续执行; 如果不存在,直到20S上限就报错 ''' content = driver.find_element_by_link_text('hao123').get_attribute('href') print(content) 手动实现页面等待 原理: 利用强制等待和显示等待的思路来手动实现 不停的判断或有次数限制的判断某一个标签对象是否加载完毕(是否存在) 代码使用示例:实现通过淘宝网页自动向下滚动,以获取特定元素属性! import time from selenium import webdriver driver=webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe") driver.get('https://www.taobao.com') time.sleep(1) for i in range(30): i += 1 try: time.sleep(3) element = driver.find_element_by_xpath('/html/body/div[12]/div/div/h3') result = element.text print(result) break except: # 网页滚动条的拖动 js = 'window.scrollTo(0,{})'.format(i * 500) # js语句 driver.execute_script(js) # 执行js的方法 driver.quit() 12.selenium控制浏览器执行js代码的方法 执行js的方法:driver.execute_script(js)代码示例:网页滚动条的拖动! from selenium import webdriver driver=webdriver.Chrome(executable_path="C:\my\Chrome_guge\chromedriver.exe") driver.get('https://www.taobao.com') # 网页滚动条的拖动 js = 'scrollTo(0,1220)' # js语句 driver.execute_script(js) # 执行js的方法 driver.quit() 13.selenium开启***面模式(无头模式) 开启***面模式的方法: ①创建一个配置对象 options = webdriver.ChromeOptions() ②配置对象添加开启***面模式的命令 options.add_argument("--headless") ③配置对象添加禁用gpu的命令 options.add_argument("--disable-gpu") ④实例化带有配置对象的driver对象 driver = webdriver.Chrome(options=options,executable_path="C:\my\Chrome_guge\chromedriver.exe") 注意:macos中chrome浏览器59+版本,Linux中57+版本才能使用***面模式! 14.selenium使用代理IP 使用代理ip的方法: ①创建一个配置对象 options = webdriver.ChromeOptions() ②配置对象添加使用代理ip的命令 options.add_argument('--proxy-server=http://202.20.16.82:9527') ③实例化带有配置对象的driver对象 driver = webdriver.Chrome(options=options,executable_path="C:\my\Chrome_guge\chromedriver.exe") from selenium import webdriver options=webdriver.ChromeOptions() # 创建一个配置对象 options.add_argument('--proxy-server=http://202.20.16.82:9527') # 使用代理ip driver = webdriver.Chrome(options=options,executable_path="C:\my\Chrome_guge\chromedriver.exe") driver.get('http://www.taobao.com/') print(driver.title) driver.quit() 15.selenium替换user-agent 替换user-agent的方法 ①创建一个配置对象 options = webdriver.ChromeOptions() ②配置对象添加替换UA的命令 options.add_argument('--user-agent=Mozilla/5.0 HAHA') ③实例化带有配置对象的driver对象 driver = webdriver.Chrome(options=options,executable_path="C:\my\Chrome_guge\chromedriver.exe") from selenium import webdriver options=webdriver.ChromeOptions() # 创建一个配置对象 # 配置对象添加替换UA的命令 options.add_argument('--user-agent=Mozilla/5.0 HAHA') # 替换user-agent # 实例化带有配置对象的driver对象 driver = webdriver.Chrome(options=options,executable_path="C:\my\Chrome_guge\chromedriver.exe") driver.get('http://www.taobao.com/') print(driver.title) driver.quit() 16.选项卡管理 首先访问百度,然后调用execute_script()方法传入window.open()这个JavaScript语句新开启一个选项卡。接下来切换到选项卡,在选项卡下打开一个新页面,然后切换回第一个选项卡访问京东! import time from selenium import webdriver browser = webdriver.Chrome() browser.get('https://www.baidu.com') browser.execute_script('window.open()') browser.switch_to.window(browser.window_handles[1]) browser.get('https://www.taobao.com') time.sleep(1) browser.switch_to.window(browser.window_handles[0]) browser.get('https://www.jd.com/') 17.异常处理 在使用selenium过程中,难免遇到一些异常,例如超时,节点未找到等错误,一旦出现程序便中断,这里我们使用try except语句来捕获各种异常! from selenium import webdriver from selenium.common.exceptions import TimeoutException, NoSuchElementException browser = webdriver.Chrome() try: browser.get('https://www.baidu.com') except TimeoutException: print('Time Out!') try: browser.find_element_by_id('hello') except NoSuchElementException: print('No Element!') finally: browser.close() 18.selenium中一些实用的操作 ①两种点击操作: from selenium.webdriver.common.keys import Keys # 假设input为定位到的需要点击操作的标签。 # 下面的操作效果同input.click()一样! input.send_keys(Keys.ENTER) ②定位不到元素异常的捕获: from selenium.common.exceptions import NoSuchElementException # 以下捕获异常的方法可以避免元素定位不到而报错! try: # 假设browser为初始化的浏览器对象 logo = browser.find_element_by_class_name('logo') except NoSuchElementException: print('No find logo!')

优秀的个人博客,低调大师

Linux搭建jmeter+ant+jenkins持续集成接口自动化框架

前置条件:系统已安装jdk 一、下载jmeter包,通过客户端放在安装目录 1、本次安装的版本为unzip apache-jmeter-5.0.zip unzip apache-jmeter-5.0.zip 2、配置环境变量 执行 vim /etc/profile 在后面加入: exportJMETER_HOME=/root/apache-jmeter-5.0 exportCLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH exportPATH=$JMETER_HOME/bin:$PATH:$HOME/bin 3、执行: source /etc/profile ,让配置生效 4、验证安装 jmeter -v 如果出现:-bash: /root/apache-jmeter-5.0/bin/jmeter: Permission denied 则给jmeter执行文件授权: 执行:chmod 777 /root/apache-jmeter-5.0/bin/jmeter 若看到如下图,则安装成功 5、下载报告模板 地址:http://shanhe.me/download.php?file=jmeter.results.shanhe.me.xsl 把报告放到jmeter的extras路径下面: /root/apache-jmeter-5.0/extras 下载jmeter插件的的jar包 下载地址:https://jmeter-plugins.org/install/Install/ 本次的版本为:jmeter-plugins-manager-1.3.jar 把这个jar包放到jmeter的:/root/apache-jmeter-5.0/lib/ext目录下面 二、安装ant 1、下载地址:https://ant.apache.org/bindownload.cgi 本次下载版本为:apache-ant-1.10.6-bin.tar.gz 2、上传到服务器与jmeter同一目录,本次的目录为/root 解压文件执行:tar -zxvf apache-ant-1.10.6-bin.tar.gz 3、配置环境变量,在/etc/profile后面添加如下信息 ANT_HOME=/root/apache-ant-1.10.6 CLASS_PATH=.:$JRE_HOME/lib PATH=$JRE_HOME/bin:$ANT_HOME/bin export ANT_HOME CLASS_PATH PATH 执行: source /etc/profile 验证安装: 执行:ant -version 三、安装tomcat 1、下载安装包 下载地址:https://tomcat.apache.org/download-80.cgi 本次所用的版本为:apache-tomcat-8.5.35.tar.gz 2、上传安装包到服务器 本次放置的目录为/usr 解压执行: tar -zxvf apache-tomcat-8.5.35.tar.gz 3、重命名文件夹 执行:mv apache-tomcat-8.5.35 tomcat-jenkins 4、启动tomcat 4.1、执行: cd /data/tomcat-jenkins/bin 4.2、执行 sh startup.sh 如果见到如下报错: :Cannotfind./catalina.sh.Thefileisabsentordoesnothaveexecutepermission.Thisfileisneededtorunthisprogram 则权限不足:执行chmod 777 /data/tomcat-jenkins/bin/startup.sh 4.3、查看进程 执行:ps aux|grep tomcat-jenkins 如下则启动成功,默认端口为8080 5、在浏览器访问http://ip地址:8080 见到如下页面说明安装成功 四、安装jenkins 下载地址:https://jenkins.io/doc/book/installing/ 1、把jenkins的war包放到tomcat的如下目录 /usr/tomcat-jenkins/webapps 访问http://ip:8080/jenkins 见到如下页面 2、根据提示,打开相应的文件获取初始密码 执行:vim /root/.jenkins/secrets/initialAdminPassword 3、配置用户 4、见到如下页面说明安装成功 PS:jenkins配置工作空间 1、vim /usr/tomcat-jenkins/bin/catalina.sh 2、在# OS specific support. $var _must_ be set to either true or false.在上面添加一行 export JENKINS_HOME=/usr/local/jenkins 3、编辑profile文件:vi /etc/profile 4、添加:export JENKINS_HOME=/usr/local/jenkins 5、source /etc/profile 6、sh startup.sh 如果jenkins显示似乎已离线 则更改https为http /usr/local/jenkins/hudson.model.UpdateCenter.xml 5、配置ant+jmeter 把extras目录下面的ant-jmeter-1.1.1.jar 拷贝到ant 的lib目录 cp ant-jmeter-1.1.1.jar /root/apache-ant-1.10.6/lib/ 6、修改jmeter配置 6.1、将文件中#jmeter.save.saveservice.output_format=csv改为jmeter.save.saveservice.output_format=xml 6.2、修改如下输出信息 jmeter.save.saveservice.data_type=true jmeter.save.saveservice.label=true jmeter.save.saveservice.response_code=true # response_data is not currently supported for CSV output jmeter.save.saveservice.response_data=true # Save ResponseData for failed samples jmeter.save.saveservice.response_data.on_error=false jmeter.save.saveservice.response_message=true jmeter.save.saveservice.successful=true jmeter.save.saveservice.thread_name=true jmeter.save.saveservice.time=true jmeter.save.saveservice.subresults=true jmeter.save.saveservice.assertions=true jmeter.save.saveservice.latency=true jmeter.save.saveservice.connect_time=true jmeter.save.saveservice.samplerData=true jmeter.save.saveservice.responseHeaders=true jmeter.save.saveservice.requestHeaders=true jmeter.save.saveservice.encoding=false jmeter.save.saveservice.bytes=true jmeter.save.saveservice.url=true jmeter.save.saveservice.filename=true jmeter.save.saveservice.hostname=true jmeter.save.saveservice.thread_counts=true jmeter.save.saveservice.sample_count=true jmeter.save.saveservice.idle_time=true 五、jenkins配置ant 1、全局工具配置 2、安装插件: HTML publisher 3、配置工程 4、修改buid.xml文件 <xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl"> 5、构建工程 6、查看报告 查看报告如下,感觉确实丑了一些,后面有空再优化一下 若报告样式没有加载出来 则在命令行执行:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "") : System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

优秀的个人博客,低调大师

谷歌开源自动化查找最佳 ML 模型的平台“Model Search”

谷歌方面表示,为了克服缺陷并将 AutoML 解决方案的访问范围扩展到更广泛的研究社区,其决定推出机器学习模型搜索平台Model Search的开源版本。 该平台可帮助研究人员高效、自动地开发最佳 ML 模型。Model Search不关注特定领域,而是领域不可知的、灵活的、并且能够找到最适合给定数据集和问题的适当体系结构,同时最大程度地减少编码时间、工作量和计算资源。其基于 Tensorflow 构建,可以在单台机器上或分布式设置中运行。 Model Search系统由多个 Trainer、一个搜索算法、一个转移学习算法和一个用于存储各种评估模型的数据库组成。以自适应但异步的方式运行各种 ML 模型(不同的体系结构和训练技术)的训练和评估实验。每个 trainer都独立进行实验时,但所有 trainer都会分享从实验中获得的知识。在每个周期的开始,搜索算法都会查找所有已完成的试验,并使用 beam search 来决定下一步要尝试什么。然后该搜索算法在当下发现的最佳架构之一上调用突变,并将生成的模型分配回训练器。 Model Search能根据一组预定义模块,来构建神经网络模型,每个模块包含一个经典微结构,例如 LSTM、ResNet或 Transformer 层。通过使用这些预先存在的架构组件,Model Search 可以利用跨领域 NAS 研究中现有的最佳知识。这种方法更加高效,因为它探索的是结构,而非更基础和更细化的组件,从而降低了搜索空间的规模。 此外,由于 Model Search 框架基于 TensorFlow 构建,因而各个块可以实现任意以张量作为输入的函数。例如,如果想要提出一种基于一系列微架构构建的新搜索空间,Model Search 框架将吸收新定义的块并将它们合并至搜索过程,从而确保算法可以根据所提供的组件构建最佳的神经网络。这里的构建块甚至可以是能够解决某些特定问题的完全定义神经网络。在这种情况下,Model Search 可以作为一种强大的集成机器。 Model Search 中实现的搜索算法是自适应性的、贪婪的和增量的,这使得这些算法的收敛速度比 RL 算法快。但是,这些算法也会模拟 RL 算法中的 explore and exploit 特性。具体操作是,首先通过分离搜索找出优秀的候选对象(即探索步骤),然后通过集成这些发现的候选对象来提升准确率(即利用步骤)。在将随机更改应用于架构或训练技术(例如,增加架构的深度)之后,主搜索算法会自适应地修改执行效果最好的 k 个实验之一(其中 k 可由用户指定)。 据谷歌介绍,为了进一步提高效率和准确性,可以在各种内部实验之间进行迁移学习。Model Search还以知识蒸馏和权重共享两种方式实现了迁移学习。 知识蒸馏通过添加一个与高效模型的预测相匹配的损失项,提升候选对象的准确率。 权重共享则通过复制先前训练模型中的适当权重并随机初始化其余权重,从先前训练的候选对象中(经过突变)bootstrap 一些参数。这种方式不仅可以加速训练过程,还有可能发现更多更好的架构。 另一方面,实验结果表明,Model Search还可以以最少的迭代次数来改进生产模型。谷歌方面称,其将 Model Search 用于探索关键字标记与语言辨识模型,发现经过不到 200 次迭代,就能获得比专家设计更好的模型,且少使用了 13万可训练参数。 谷歌透露其还应用了 Model Search 在 CIFAR-10 图像数据集上寻找适合的图像分类架构。使用一组已知卷积块,包括卷积、resnet 模块、NAS-A 单元、全连接层等,Model Search 能够在 209 次试验(即只探索了 209 个模型)后快速达到 91.83 的基准精度。相比之下,要达到相同的准确率,NASNet 算法需要 5807 次试验,PNAS则需要 1160 次试验。

优秀的个人博客,低调大师

Robotgo v0.90.0 发布,Go GUI 自动化,大幅度更新

Robotgo v0.90.0 发布了,Golang 跨平台控制鼠标、键盘、位图、屏幕、窗口句柄以及全局事件监听。 该版本主要增加:更现代和并发的 gohook API, 尝试多屏支持, 更新 keycode 无需 type 转换, 支持 windows non-POSIX gcc; Linux 下 TypeStr 优化并修复 bug, 增加 ToBitmapBytes() 和多平台 system scale 支持, 导出并增加更多 keycode 支持, 更多 win32 方法导出等一些列的大更新。 增加更多示例、测试代码, 支持 Linux 测试和 Github Actions, 修复 bug 等。 项目地址: https://github.com/go-vgo/robotgo MT. Rainier Add add gohook modern and concurrent API, add new gohook examples, thks for cauefcr Support for multiple screens, add getMousePos() multiple screens support, add move smooth multiple screens support add all platform system scale support, add get screen size test code add screen and bitmap multiple screens support, add int32_t types support update keycode type use uint16 with gohook, not type convert; add ToBitmapBytes func (#204) gohook: sched_yield support for non-POSIX windows gcc add gops test code support, add Process() function test code, add more gops test code add more win32 function export add get mouse color function add uint32 to Chex function support add key_Toggles() c function, add keyTap and keyToggle "...string" parameters support, Fixed #209 add robotgo simple test code add Is64Bit() c and go function add process FindPath() function add keycode "delete" support and fixed "\" error add more keycode support, "up, down, left, right"... export hook keycode and add godoc use robotn fork xgb and update go mod add hook example to robotgo examples update gohook and tt mod file add more and update test code add drag smooth function support and examples add ShowAlert() test support update keypress rand sleep [reduce] and update code style, update c delay default value to 0 add mouse toggle return and add more test add SetDelay function code and update other code add scaled function code add go opencv file add readme.md file add move mouse and move smooth relative code add move mouse and move smooth relative examples add more test code and update go tt mod add more bitmap test code add SaveImg function code add drop function hint print support add more key test code, add more test code, add paste string test code, add xvfb run codecov test add keycode test support add FindPath example code add KeyTap() args[2] delay support add find bitmap nil args support add find color nil args support add drag and move mouse multiple screens support add drag mouse test code Use CGDisplayBounds not CGDisplayPixelsWide, optimize get mac display size … Update TypeStr function, add type delay and speed support update PasteStr function code return error Update Update robot info test code and Add go.yml test support use while not for match special key map remove unless x11 special key and sort update go mod pkg update mod vendor remove vendor and update .gitignore update and fmt config.yml, add Linux go test support update Linux CI support x11 test move hook to hook.go update appveyor and test code update version and code style update move mouse smooth test code update clipboard code and add test code update test code and add codecov support update show alert test code update keycode.go update window examples code update test code remove windows alert test move gops code to ps.go update version update unix get title type gofmt go code and update code style add ToBitmapBytes examples code update example code, fixed golint warning update bitmap example code Update CHANGELOG.md update code style update godoc update keytap code and code style update Bitmap struct delete fuzzy api update key examples code add bitmap from string clear api update go mod vendor update go mod pkg not proxy update bitmap example code update test code fixed appveyor CI update test code fixed equal error update hook godoc update event example code update godoc and code style update key example code Update example README.md update and tidy go mod update code remove duplicate code and update godoc update xgb getXid log update GetBounds x11 error log update cgo code and version update TypeString function code [Drop] update key example code Update TypeStr function, optimize x11 type string Update TypeStrDelay function, remove unused code update code fixed x11 type sleep Update key example code use gops to simplify code update key examples code update bitmap examples code update colorpicker and findcolor example code update bitmap example code update robotgo test code, add more test Update README.md rename type names make clearer update types.h code and fixed bug remove unused code fixed x11 build error update robot info test code and appveyor Update README.md, Add more CI badge update gohook pkg and robot info test code Update linux upper code, add more special key support Create go.yml Update go.yml add more test and update go.yml Update dockerfile to go1.13.5 update dockerfile and appveyor.yml Update dockerfile and appveyor.yml to go1.14.3 remove Travis go1.11.x update appveyor and dockerfile to go1.13.1 update dockerfile, go.yml and appveyor.yml to go1.14 update travis.yml to go1.14.x and remove go1.13.x Update and fmt appveyor.ymlu update dockerfile and appveyor to go1.12.5 update appveyor and dockerfile to go1.12.6 add CI go1.13 support update config.yml update and fmt travis.yml Update Travis remove go1.12.x Update issue and pull request template Fix Update to utf-code function Fixed #189 Update x11 keypress upper code Fixed #243 type conversion needed in addMouse (#201) update hook, Fixed #202 fatal error: concurrent map writes add key Kind Fixed #203 optimize get title code, Fixed #165 and typo Fixed gohook#3 mouse is_drag error on x11 Fixed #213 AddEvents() can't listen correctly multiple times update clipboard error hand Fixed #212 Update go.mod fixing issue "invalid pseudo-version: does not match version … update keyboard example code, #238 update go mod file Fixed #239 update gops and other mod files fixed bug

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册