首页 文章 精选 留言 我的

精选列表

搜索[Java框架],共10000篇文章
优秀的个人博客,低调大师

新一代国产 ORM 框架 sagacity-sqltoy-5.1.14、4.19.5 发版

开源地址: github:https://github.com/sagframe/sagacity-sqltoy gitee:https://gitee.com/sagacity/sagacity-sqltoy idea 插件(可直接在idea中检索安装):https://github.com/threefish/sqltoy-idea-plugins 更新内容 1、优化executeSql增加存在分库分表场景 2、batchUpdate增加公共属性赋值(创建人、创建日期、修改人、修改日期等) 3、updateByQuery、deleteByQuery、updateFetch完善分库分表场景 4、优化sql中以?(问号)传参且有@fast()场景下按比例取Top记录和取随机记录时参数位置处理缺陷 qltoy的关键优势: //------------------了解 sqltoy的关键优势: -------------------------------------------------------------------------------------------*/ //1、最简最直观的sql编写方式(不仅仅是查询语句),采用条件参数前置处理规整法,让sql语句部分跟客户端保持高度一致 //2、sql中支持注释(规避了对hint特性的影响,知道hint吗?搜oracle hint),和动态更新加载,便于开发和后期维护整个过程的管理 //3、支持缓存翻译和反向缓存条件检索(通过缓存将名称匹配成精确的key),实现sql简化和性能大幅提升 //4、支持快速分页和分页优化功能,实现分页最高级别的优化,同时还考虑到了cte多个with as情况下的优化支持 //5、支持并行查询 //6、根本杜绝sql注入问题 //7、支持行列转换、分组汇总求平均、同比环比计算,在于用算法解决复杂sql,同时也解决了sql跨数据库问题 //8、支持保留字自动适配 //9、支持跨数据库函数自适配,从而非常有利于一套代码适应多种数据库便于产品化,比如oracle的nvl,当sql在mysql环境执行时自动替换为ifnull //10、支持分库分表 //11、提供了取top、取random记录、树形表结构构造和递归查询支持、updateFetch单次交互完成修改和查询等实用的功能 //12、sqltoy的update、save、saveAll、load 等crud操作规避了jpa的缺陷,参见update(entity,String...forceUpdateProps)和updateFetch //13、提供了极为人性化的条件处理:排它性条件、日期条件加减和提取月末月初处理等 //14、提供了查询结果日期、数字格式化、安全脱敏处理,让复杂的事情变得简单,大幅简化sql或结果的二次处理工作 //-----------------------------------------------------------------------------------*/ sqltoy特点介绍: sqltoy的核心构建思想 sqltoy的对比mybatis(plus)和fluent mybatis的核心点:查询语句编写、可阅读性、可维护性 对象化crud是基础,但sqltoy有针对性的改进:update、updateSaveFetch、updateFetch等 sqltoy的缓存翻译,大幅减少表关联简化sql,让你的查询性能成几何级提升 极致的分页,同样帮助你实现查询的性能大幅提升 快速分页:@fast() 实现先取单页数据然后再关联查询,极大提升速度 分页优化器:page-optimize 让分页查询由两次变成1.3~1.5次(用缓存实现相同查询条件的总记录数量在一定周期内无需重复查询 sqltoy的分页取总记录的过程不是简单的select count(1) from (原始sql);而是智能判断是否变成:select count(1) from 'from后语句', 并自动剔除最外层的order by sqltoy支持并行查询:parallel="true",同时查询总记录数和单页数据,大幅提升性能 便利的跨数据库统计计算:数据旋转 便利的跨数据库统计计算:无限极分组统计(含汇总求平均) 便利的跨数据库统计计算:同比环比

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

Midway 2.13.3 发布,适用于构建 Serverless 服务的 Node.js 框架

临近双十一,我们的发版会更加的慎重,周期变长,请谅解。 Features 1、提供了一批新的组件 1、tablestore 组件,for aliyun tablestore,并提供了完整的多实例方案和 ts 定义 使用文档 2、view 系列的组件,比如 view-ejs 和 view-nunjucks,使用文档 Bugfix 1、provide uuid 改造后的循环注入问题 感谢社区 @HuJingKang 提供此 PR。 在 v2.13.0 版本新增了providerUUId 之后,在组件中使用循环依赖会导致程序卡死,这一 PR 修复了该问题并提供了 case,后续可以避免再次出现。 2、修复一个隐藏的内存泄露问题 在 Serverless 场景下是,运行时使用了一个 node 内置的 perf_hooks 的 performance 打点 API,该模块在记录后不会清理数据,导致在请求量过大时内存溢出。 由于该泄露点非常小,在大量的压测后我们才定位发现该问题,现已修复。 3、修复函数式 configuration 的异步问题 在之前提供的函数式 configuration 写法中遗漏了 async 函数的处理,导致 onReady 中的异步会返回 Promise,在某些情况下会卡住进行,在新版本中处理了该问题。 4、orm 组件中 geRepository 系列 API 的问题 在之前版本中,我们提供了多个 connection 的写法,同时将获取连接池的注入变成了回调形式,但是漏改了 getRepository 系列 API,导致这些 API 不可用。新版本修复了该问题。

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

Framework7 6.2.0 发布,用于构建 iOS 和 Android 应用的 HTML 框架

错误修正: navbar:当点击<a>和<button>时,导航条标题不会滚动页面顶部; stepper:允许在 manualMode 下输入负数; svelte:修复了不工作的 LoginScreen 事件; 功能: checkbox:深色主题下的黑色复选框图标; checkbox:更新 iOS 复选框图标以符合 iOS 15 的外观; panel:新的push效果; radio:更新 iOS 收音机图标以匹配 iOS 15 的外观; range:调整 Range Slider 样式以匹配 iOS 15 的外观; touch: 在 iOS 主题中可滑动/可激活的 Dialog 框和 Actions 按钮; 更多详情可查看:https://framework7.io/release-notes/

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

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

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

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

Sublime Text

Sublime Text

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册