OpenTest 自动化持续集成持续部署流水线 自动化测试后端程序。前端程序https://github.com/jstang9527/opentest_view
集成众多的第三方工具,使其能够做到产品、项目的自动化拉取、部署、安装、测试、安全审计等。
采用Qemu快照方式,提供极速的启动和环境的还原。
采用Jenkins配置自动化作业
采用Aquaman进行软件的安全审计及渗透测试
采用Jmeter进行接口、性能的测试
采用es+kibana检索、聚合测试条目数据
API接口使用Go进行开发。
(若图片无法显示, 可在resources/images中获得)
Dashboard
Qemu控制台
Web测试-组件列表
Web测试-组件详情
Web测试-行为链
Web测试-测试截图
接口、性能测试
接口、性能测试
Jenkins自动化部署
Jenkins自动化测试
Jmeter的JMX脚本
Kibana检索、聚合测试数据
安全审计、渗透测试(代码仓库在本github的aquaman项目, 这里不做过多展示和描述)
- Selenium -- web测试
- Aquaman(自研, 详看本github的aquaman仓库) -- 安全审计、渗透测试
- Jmeter -- 性能、接口测试
- ElasticSearch -- 存储测试数据
- SonarQube(todo) -- 代码审计
- Qemu -- 便于测试完后还原环境
- Centos-7.5
- Go-1.12.4
- Chromedriver
- Selenium
- Jenkins
- Qemu
- Jmeter
- Mysql
- Redis
- Kibana
- Elasticsearch
1.运行容器:
1.1 mysql
docker run -itd -p 3306:3306 --name mysql mysql:5.7
1.2 redis
docker run -itd -p 6379:6379 --name redis redis
1.3 elasticsearch
docker run -d -p 9200:9200 -p 9300:9300 --name es -e "discovery.type=single-node" elasticsearch:7.2.0
创建索引:
curl -X PUT 127.0.0.1:9200/test
1.4 kibana
创建配置文件 kibana.yml
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://localhost:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"
docker run -it -d -v /home/ops/kibana/kibana.yml:/opt/kibana/config/kibana.yml
-e ELASTICSEARCH_URL=http://172.31.50.254:9200 --name kibana -p 5601:5601 kibana:7.2.0
2.jenkins部署:
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.270/jenkins.war
yum install java
java -jar jenkins.war
3.Qemu RPC服务:
yum -y install gcc gcc-c++ automake libtool zlib-devel glib2-devel bzip2-devel libuuid-devel spice-protocol spice-server-devel usbredir-devel libaio-devel
wget https://download.qemu.org/qemu-4.2.0.tar.xz
tar xvJf qemu-4.2.0.tar.xz
cd qemu-4.2.0
./configure
make && make install
默认 安装在/usr/local/bin/
go run mico-srv/srv/vm-mgr/main.go
4.Selenium+chrome+chromedriver安装
https://blog.csdn.net/weixin_40074627/article/details/88933685
5.Jmeter安装
https://www.cnblogs.com/lystbc/p/11267314.html
6.sql文件
CREATE TABLE `chain_block` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`block_name` varchar(255) NOT NULL DEFAULT '' COMMENT '组件名',
`priority` tinyint(4) NOT NULL DEFAULT '1' COMMENT '重要性',
`expect` varchar(255) NOT NULL DEFAULT '' COMMENT '期望',
`create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间',
`update_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '更新时间',
`is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除',
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='组件表';
CREATE TABLE `chain_action` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`block_id` bigint(20) NOT NULL COMMENT '组件ID',
`action_name` varchar(50) NOT NULL DEFAULT '' COMMENT '动作名',
`allow_err` tinyint(4) NOT NULL DEFAULT '0' COMMENT '错误为真',
`element_id` varchar(50) NOT NULL DEFAULT '' COMMENT '元素ID',
`element_value` varchar(100) NOT NULL DEFAULT '' COMMENT '元素值',
`event_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '事件类型',
`search_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '检索方式',
`timeout` int(11) NOT NULL DEFAULT '0' COMMENT '超时时间',
`timestamp` varchar(100) NOT NULL DEFAULT '' COMMENT '中文时间',
`url` varchar(100) NOT NULL DEFAULT '' COMMENT '资源定位符',
`xpath` varchar(255) NOT NULL DEFAULT '' COMMENT 'XPath',
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='动作表';
CREATE TABLE `chain_stream` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`stream_name` varchar(255) NOT NULL DEFAULT '' COMMENT '流水线名',
`stream_desc` varchar(255) NOT NULL DEFAULT '' COMMENT '线描述',
`create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间',
`update_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '更新时间',
`is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除',
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='流水线表';
CREATE TABLE `chain_multi_block_stream` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`block_id` bigint(20) NOT NULL COMMENT '组件ID',
`stream_id` bigint(20) NOT NULL COMMENT '流水线ID',
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='组件和流水线多对多表';
CREATE TABLE `sec_task` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`task_name` varchar(50) NOT NULL DEFAULT '' COMMENT '任务名',
`task_md5` varchar(100) NOT NULL DEFAULT '' COMMENT '任务Md5',
`task_targets` varchar(255) NOT NULL DEFAULT '' COMMENT '任务目标',
`open_web` tinyint(4) NOT NULL DEFAULT '0' COMMENT '开启web扫描',
`open_poc` tinyint(4) NOT NULL DEFAULT '0' COMMENT '开启Poc检测',
`protocol` varchar(255) NOT NULL DEFAULT '' COMMENT '协议',
`open_exp` tinyint(4) NOT NULL DEFAULT '0' COMMENT '开启漏洞利用',
`scan_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '扫描类型(默认全扫)',
`task_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '任务状态',
`task_result` tinyint(4) NOT NULL DEFAULT '0' COMMENT '检测结果',
`create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间',
`update_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '更新时间',
`is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除',
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='安全审计任务表';
CREATE TABLE `nmap_report` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`task_id` varchar(50) NOT NULL DEFAULT '' COMMENT '任务id',
`pid` bigint(20) NOT NULL DEFAULT '0' COMMENT '父id',
`json_str` text COMMENT '结果数据',
`create_at` datetime NOT NULL DEFAULT '1971-01-01 00:00:00' COMMENT '新增时间',
`is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除',
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='nmap扫描报告';
CREATE TABLE `sectask_scanreport` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`sectask_id` bigint(20) NOT NULL COMMENT 'SEC任务ID',
`task_status` varchar(50) NOT NULL DEFAULT '' COMMENT '动作名',
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='SEC扫描报告';
insert into priority(id,name) values(1,"Low"),(2,"Nomal"),(3,"High");
insert into status(id,name) values(0,"Unknown"),(1,"Pass"),(2,"Info"),(3,"Warning"),(4,"Error"),(5,"Fatal");
insert into function(pid,name,message,screenshot,priority_id,status_id,duration) values("123456","login","success","/resources/xxx.png", 1,3,6000);
go-selenium 驱动库 https://github.com/tebeka/selenium
解析 html文件 https://github.com/PuerkitoBio/goquery
许多技术已经陈旧, 例如go-selenium改用Python-selenium、Qemu改用docker、grpc更换go-micro、robot-framework替代部分工具及功能。