在Maven和Travis中使用Jacoco进行代码覆盖测试

测试是代码生命周期的一个很重要的部分,对于开源软件一份测试报告可以提高使用者对此代码的信任度。 测试覆盖率能体现出测试中所覆盖的代码范围,也能体现测试用例的设计是否合理。 话虽如此,但是自从懂事以来就没有给自己的代码写过测试类。JUnit也是拿来当Jshell用(这么方便的@Test哪里去找) 测试环境 这次配合自己写的一个开源库,所以配置了一套完整的测试步骤。 travis-ci(因为这个项目直接托管在github上所以用travis会比较方便) maven(自动打包和测试) jacoco(导出测试报告) coveralls(第三方测试统计平台) 测试流程就是当代码Push到GitHub之后,travis创建VM开始执行maven对代码进行打包和测试,同时jacoco生成测试报告,完成之后将报告上传至coveralls。 ...

一月 24, 2019 · 猫贩子薛定谔

使用Jenkins管理多个服务器

Jenkins作为一个CI工具在各种插件的加持下可以变成一个十分强大的工具,可以实现对各个平台代码的持续集成和部署。 甚至可以通过一些方法对多个节点进行同步更新代码等操作。 例如if.uy 多节点ping服务,目前ping节点服务器使用python3编写。虽然代码只有短短几百行但是如果每次更新都得手动上服务器对代码进行更新的话无疑是一件浪费时间精力的实情。所以为了防止因更新太频繁而放弃更新的情况出现,需要使用一种方法一次更新多节点自动同步的方案。 提出方案 所以根据需求可以设计出以下几种方案: flask debug 模式热更新代码 Zookeeper 统一管理节点 jenkins Publish over SSH 插件管理节点 ...

一月 5, 2019 · 猫贩子薛定谔

QML连接MySQL数据库

QT 5.X以上的版本集成了多种数据库的驱动 QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 大部分情况只需要QT继承的库就可以完成数据库操作。 小坑 然而在使用Qt createor mingw时会出现无法载入驱动QSqlDatabase: QMYSQL driver not loaded的提示,出现这种情况的原因是Mingw的版本与驱动libmysql.dll不兼容。所以使用VS的情况下能够与Mysql成功连接。 默认安装的mingw都是32位,然而mingw内自带驱动却为64位,如果安装64位的MySQL得到的也是64位,因此需要下载32位的驱动放到mingw的bin目录下。这里提供我使用的版本 MySQL官网下载到的dll为400多kb与MySQL安装路径下的dll同样的大小,也无法成功连接,不知道是不是需要自己再编译一次? ...

八月 8, 2018 · 猫贩子薛定谔

使用Gitlab CI与Maven创建Docker镜像

之前使用了Jenkins作为自动构建工具,然而还是需要自己一台VPS去安装Jenkins软件。 然而Gitlab提供CI/CD服务(Continuous Integration & Deployment)每月有2k Mins的免费额度,如果需要更多的事件可以购买Ultimate或者自己搭建Runner。 同时Gitlab也提供免费的registry,不知道有没有额度限制,直接一条龙服务都提供了(Gitlab 大法好)。除了上次删库的情况也没出现过啥问题,没有私有库数量的限制,拿来专做自己的私有库还是不错滴。 自动化脚本gitlab-ci.yml 创建gitlab-ci.yml保存在项目根目录下编写以下内容 ...

七月 30, 2018 · 猫贩子薛定谔

使用Maven、jenkins、docker实现持续集成

之前使用过jenkins+maven的方法自动构建项目并推送到tomcat的方法–>传送门 由于spring boot/cloud等的微服务的流行,人们更喜欢即开即用的方式。docker作为一个免费开源的容器,越来越多的应用也都会存在一个docker版本(比如jenkins、gitlab)。不过spring boot只需要一句命令就能启动也可以不需要创建一个docker版本。 安装 必须的系统环境: Jdk(推荐还是用Oracle JDK,Jenkins执行编译的过程还是需要Oracle JDK的,方便起见替换掉系统的openjdk) Maven Docker Git Jenkins docker hub 配置 使用docker官方的registry保存镜像,并不知道有没有限制。 创建一个私有Repo,repository的名称将作为镜像的名称 Maven配置 使用Maven构建docker镜像的话需要使用docker-maven-plugin 在pom.xml添加插件和配置信息,根据官方的实例修改配置 <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.11</version> <configuration> <!-- 目标位置 --> <serverId>docker-hub</serverId> <!-- 用户名/镜像名 --> <imageName>tusik/web</imageName> <!-- Dockerfile的位置 --> <dockerDirectory>src/main/docker</dockerDirectory> <pushImage>true</pushImage> <!-- 镜像的标签,project.version在properties标签下添加 --> <imageTags> <imageTag>${project.version}</imageTag> <imageTag>latest</imageTag> </imageTags> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <!-- copy the service's jar file from target into the root directory of the image --> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> 根据上面的配置在Maven的setting.xml下添加全局的docker hub信息 ...

七月 29, 2018 · 猫贩子薛定谔

浏览者信息收集

仅仅记录投票票数确实有些无聊,所以需要适当的收集一些信息在进行统计就能得到一些更有趣的图表。 Request 以最基础的Request header入手。 HTTP 消息头允许客户端和服务器通过 request和 response传递附加信息。一个请求头由不区分大小写的名称后跟一个冒号“:”,冒号后跟具体的值(不带换行符)组成。该值前面的引导空白会被忽略。 每次的HTTP连接中必定会有header内容,因此从此很方便的获取访客的基本信息。 header支持的标准字段有很多,在此就仅列出一些拥有有效信息的字段: 字段名 描述 示例 状态 Accept-Charset 能够接受的字符集 Accept-Charset: utf-8 常设 Accept-Encoding 能够接受的编码方式列表。 Accept-Encoding: gzip, deflate 常设 Accept-Language 能够接受的回应内容的自然语言列表。 Accept-Language: en-US 常设 Referer 來源頁面 Referer: http://en.wikipedia.org/wiki/Main_Page 常設 User-Agent 浏览器的浏览器身份标识字符串 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36 Maxthon/5.2.1.1000 常設 想要查看更多内容查看Wikipedia 以上就是比较常用的含有有效内容的字段。 不过Request header中包含的信息实在是少的可怜,所以需要使用其他方法来获取更多的信息。 ...

四月 20, 2018 · 猫贩子薛定谔

Canvas Fingerprint的使用

最近又又又买了一个新的域名,所以打算在这域名基础上写一个匿名投票用的统计系统(捡鼠标垫买电脑系列)用于一项长期的数据统计(不知道收集到多少数据)。 分析 既然是投票系统,那么就必须对防止刷票做处理。 记得N年以前有个网站投票貌似是关于360的文章,底部有个投票并没有做处理,所以我光靠按键精灵就刷了几千票,不过十几分钟之后貌似被发现了。 所以关于防刷票我能写的就有以下几种方案: 登陆注册——极大的增加投票所需要的成本,但是又由于成本导致真实用户被拒之门外。 Cookie标记——少量的成本,也容易被清理。 ip限制——没有成本,但是由于NAT的网络环境存在导致无法实行。 ip+UA限制——没有成本,但是可能会出现UA重复的情况。 Canvas Fingerprint——没有成本,极小的重复可能,但是和4一样更换浏览器就可以突破限制。 综上所述似乎Canvas Fingerprint是一个比较合理的选择。 Canvas Fingerprint Canvas指纹的原理是先使用canvas绘制一张图像,再使用canvas.toDataURL()方法可以获得图像的Base64格式编码,所得的最后一块32位长度的内容就是可以用于识别用户的crc校验码 ...

四月 7, 2018 · 猫贩子薛定谔