下文章来源于极狐GitLab ,作者极小狐
极狐GitLab.
极狐GitLab 一体化安全 DevOps 平台,帮助用户实现开发、安全和运维的高效协同。极狐GitLab 由极狐信息技术(湖北)有限公司独立运营,公司投资方包括GitLab Inc.,红杉宽带,以及高成资本等。官网: GitLab.cn
点击蓝字 关注我们
极狐GitLab 的漏洞报告功能可以让开发人员在统一的平台上面管理代码,对其进行安全扫描、管理漏洞报告并修复漏洞。但有些团队更喜欢使用类似 Jira 的单独工具来管理他们的安全漏洞。他们也可能需要以易于理解的格式向领导层展示漏洞报告。
极狐GitLab 的漏洞报告可以通过一键点击的方式导出为 CSV,方便在其他工具中进行分析。但在某些情况下,一个简单的 PDF 报告就足够了。
使用极狐GitLab 的 API,可以轻松查询漏洞信息并将报告详细信息发送到其他地方,比如 PDF 文件或 Jira 项目。在本博客中,我们将向您展示如何将 GitLab 的漏洞报告导出 HTML/PDF 格式,或直接导出到 Jira。
请注意,本教程中使用的脚本仅供参考,并不受极狐GitLab 支持。
导出为 HTML/PDF
要将漏洞报告导出为 HTML 或 PDF,可参考 custom-vulnerability-reporting 项目1。
该项目包含一个脚本,用于查询项目的漏洞报告,然后基于漏洞报告的数据生成HTML文件。项目中配置的流水线会运行此脚本,并将HTML文件转换为PDF格式。
要使用导出工具,首先需要对该项目进行 Fork(派生)2 或导入到新项目3(选择“通过URL导入存储库”,并粘贴原始项目的 git URL)。
按照自述文件 README.MD 的说明设置 CI/CD 变量。您需要以下极狐GitLab 信息:
在设置必需的 CI/CD 变量之后,从项目的流水线页面手动运行一个流水线。完成流水线后,可以访问 build_report(用于 HTML)或 pdf_conversion 作业,在侧边栏的“任务制品”下选择“下载”或“浏览”来查看您的文件导出。至此,您就获得了一个可共享且易于阅读的项目漏洞的 pdf 报告。
将漏洞信息导出到 Jira
极狐GitLab 允许您通过 UI 使用我们的 Jira 集成? 功能从漏洞中创建 Jira 工单。尽管您可以为需要处理的漏洞单独执行此操作,但有时团队需要批量创建 Jira 工单来处理所有的漏洞。我们可以利用极狐GitLab 和 Jira 的 API 来实现这一点。
开始操作之前,请参考 external-vulnerability-tracking? 项目。此脚本与上面的脚本以相同的方式获取漏洞,但它使用 Jira API 为每个漏洞创建一个工单。每个工单的描述也包含了来自 GitLab 漏洞报告的详细信息。
要使用导出工具,只需 Fork(派生)该项目? 或导入到新项目?(选择“通过 URL 导入存储库”,并粘贴原始项目的 git URL),并按照自述文件的说明设置 CI/CD 变量。
您需要准备以下 GitLab 信息:
您还将需要以下 Jira 信息:
在根据项目自述文件中的说明设置 CI/CD 变量后,只需从该项目的流水线页面运行一个流水线,然后就可以看到所有的漏洞信息将会在 Jira 中自动创建工单。如果将来再次运行流水线,脚本将对 Jira 项目运行搜索查询,防止创建重复的工单。它只会为没有记录在 Jira 中的新漏洞创建工单。
参考
Reference
1. custom-vulnerability-reporting:
https://gitlab.com/jwagner-demo/vandelay-industries/engineering/custom-vulnerability-reporting
2. Fork(派生):
https://gitlab.com/jwagner-demo/vandelay-industries/engineering/custom-vulnerability-reporting/-/forks/new
3. 导入到新项目:
https://docs.gitlab.cn/jh/user/project/import/repo_by_url.html
4. Jira集成:
https://docs.gitlab.com/ee/user/application_security/vulnerabilities/#create-a-jira-issue-for-a-vulnerability
5. external-vulnerability-tracking:
https://gitlab.com/smathur/external-vulnerability-tracking
6. Fork(派生)该项目:
https://gitlab.com/smathur/external-vulnerability-tracking/
7. 导入到新项目:
https://docs.gitlab.cn/jh/user/project/import/repo_by_url.html
8. 个人访问令牌:
https://id.atlassian.com/manage-profile/security/api-tokens
参考资料
1.https://docs.gitlab.com/ee/api/graphql/reference/index.html#queryvulnerabilities
2.https://gitlab.com/jwagner-demo/vandelay-industries/engineering/custom-vulnerability-reporting
3.https://gitlab.com/smathur/external-vulnerability-tracking
4.https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/
关于极狐(GitLab)
极狐(GitLab) 以“核心开放”为原则,面向中国市场,提供开箱即用的开放式一体化安全DevOps平台——极狐GitLab。通过业界领先的优先级管理、安全、风险和合规性功能,实现产品、开发、QA、安全和运维团队间的高效协同,加速和优化企业软件开发生命周期。极狐GitLab由极狐信息技术(湖北)有限公司在国内独立运营,提供中国本地化功能和支持服务。极狐(GitLab)公司以“中外合资3.0”模式创立,公司投资方包括GitLab Inc.、红杉宽带跨境数字产业基金、高成资本、泰康人寿、淡马锡等。
景介绍
作为一个测试同学,提交bug是个绕不过去的坎(请不要杠哈,我真不太相信有测试同学从来未提交过bug)。
但是每次提交bug,少则几项多则几十项,填得有点头大有没有?即使有模板,根据模板再修改,手动填的时候也经常会漏掉一些项有没有?
所以为了我们这些懒人的福利,自动化提交bug就应运而生了。
测试需求分析
此自动化需求主要涉及到python/pytest,且需要jira API文档(下文有jira接口文档链接)。
测试流程
自动化脚本实现
bug模板及提交jira手工步骤
提完bug的bug模板参考下图:
创建bug时,参考下图,可以看见目前统一模板有如下10个必填项:
项目、问题类型、概要、优先级、严重程度、复现概率、bug分类、影响版本、模块、描述。
此处10个必填项对应后面jira接口的相应字段。
jira提交issue接口定义
createissue接口定义,baseurl参考公司网址,此接口的详细url为:/rest/api/2/issue,方法为method。
请求体参考下图的example、update字段,此处非必要,暂时忽略,我们步骤1中说的10个必填项都包含在fields字段中。
一般情况,每个字段可以通过id、name、key3个属性值来设置,但有些时候name属性不一定能找到(例如项目),所以建议首先用id和key,然而id有需要调用其他接口获取,无法直接从界面知道,所以可以首选key。
例如项目的key则为括号里的内容,参考下图,bug管理demo项目的项目key是BUGDEMO,
此点为本人调用其他接口观察到的,具体可以找atlassian官方确认咨询。
经过调用多方接口获得能成功调用的接口字段属性如下图:
summary、description此处暂不用特别关注,在后面步骤中我们将会使用捕捉到的内容进行替换。
更多jira接口文档详细参考:https://docs.atlassian.com/software/jira/docs/api/REST/8.5.5/#api/2/issue-createIssue
issue相关信息捕捉
版本及环境:面板机此处是调用获取设备状态信息的接口获取相关固件和算法等版本信息(作为setup调用一次即可):
项目:步骤2中已描述,此处不再赘述。
标题(summary)、详细描述(description)、附件的捕捉:
(1) 断言时描述详细信息(包括失败字段、预期结果和实际结果),例如下图:
(2) 加入hook函数pytest_runtest_make_report监听运行相关信息。
(3)对监听到的相关信息进行处理,title即为捕捉到的运行的测试用例标题,由于函数title为英文,可以再和中文标题一一映射一下。
description为运行时的详细输出,类似于下图:
out为调试日志写入到文件,后期作为附件上传,其内容主要是写用例时的日志输出,类似下图:
其中hook函数pytest_runtest_make_report 更多详细内容可参考pytest官方文档(上一节中有附件),日志输出可以参考logger模块或是个人的写日志模块。
通过以上步骤初步生成的bug如图:
注意,上传附件为另外一个接口:
脚本迭代优化
可以不用调用原始的jira接口,python中jira库中有封装常用的jira接口,如jira.create_issue等。
可能遇到的问题
捕捉信息可能需要在写自动化脚本的时候相关操作,都能断言实际和预期等详细信息。
附件中的信息也需要自行控制输出。
如果bug系统非jira,可以自行找其bug系统的接口文档或其他提交bug操作。
总结
此方案及示例需要配合自身的自动化用例使用,否则手动操作后也无法自动捕捉其错误信息。
此方案的重点也是在捕捉错误信息,其他调用jira接口对于一个调包侠来说是基本操作,获取jira模板自行与pm商议即可,此方案如果上线到jenkins通过每日构建每天来run的话可能会出现大量重复的bug(由于开发解决bug没有那么快),多次后面会有文章来讨论如何解决此问题。
文末福利——推荐一个《Python自动化测试学习交流群》给大家:
请关注+私信回复:"测试" 就可以免费拿到软件测试学习资料,同时进入群学习交流~~
OC]
Jira提供了完善的RESTful API,如果不想直接请求API接口可以使用Python的Jira库来操作Jira
Jira Python文档
安装方法
pip install jira
认证
Jira的访问是有权限的,在访问Jira项目时首先要进行认证,Jira Python库提供了3种认证方式:
通过Cookis方式认证(用户名,密码)
通过Basic Auth方式认证(用户名,密码)
通过OAuth方式认证
认证方式只需要选择一种即可,以下代码为使用Cookies方式认证。
form jira import JIRA
jira=JIRA('http://jira.***.com/', auth=('用户名', '登录密码')
返回的jira对象便可以对Jira进行操作。主要的操作包括:
项目
问题
搜索
关注者
评论
附件
项目(Project)
jira.projects(): 查看所有项目列表
jira.project("项目的Key"): 查看单个项目
项目对象的主要属性及方法如下:
key: 项目的Key
name: 项目名称
description: 项目描述
lead: 项目负责人
projectCategory: 项目分类
components: 项目组件
versions: 项目中的版本
raw: 项目的原始API数据
示例
print(jira.projects()) # 打印所有你有权限访问的项目列表
project=jira.project('某个项目的Key')
print(project.key, project.name, project.lead)
问题(Issue)
Issue是Jira的核心,Jira中的任务,用户Story,Bug实质上都是一个Issue。
单个问题对象可以通过jira.issue("问题的Key")得到,问题的主要属性和方法如下:
id: 问题的id
key: 问题的Key
permalink(): 获取问题连接
fields: 问题的描述,创建时间等所有的配置域
raw: 问题的原始API数据
龙腾原创
联系作者:xiaowanzi02620
*请认真填写需求信息,我们会在24小时内与您取得联系。