基于unittest+coverage+pipeline+sonar的python测试覆盖率统计

python版本:2.7.12

1、unittest的写法示例

# runtest.py
# -*- coding: utf-8 -*-
import unittest

class testadd(unittest.TestCase):
    def setUp(self):
        pass
    def test_add1(self):
        self.assertEqual(2 + 3 + 10,15)
    def test_add2(self):
        self.assertEqual(10 + 150,160)
    def test_add3(self):
        #一处出错,查看测试结果
        self.assertEqual(2 * 5 * 7, 40)
    def tearDown(self):
        pass
def not_used():
    print("this not used")

if __name__=="__main__":
     unittest.main()

2、安装coverage

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn coverage==5.5

3、coverage用法

run - 运行一个python程序并收集运行数据
report - 生成报告
html - 把结果输出html格式
xml - 把结果输出xml格式
annotate - 运行一个python程序并收集运行数据
erase - 清楚之前coverage收集的数据
combine - 合并coverage收集的数据
debug - 获取调试信息
help - 查看coverage帮助信息,coverage help 动作/coverage 动作 –help,查看指定动作的帮助信息。
可以通过–rcfile=FILE的方式指定命令运行时的配置文件。所有命令行的参数都可以写到配置文件里面。

单个测试用例文件用法示例:

coverage run runtest.py #生成一个.coverage文件
coverage html
coverage xml

多个测试用例文件用法示例:

coverage run -p runtest.py #生成一个.coverage文件
coverage run -p runtest2.py #生成另一个.coverage文件
coverage combine #合并.coverage文件
coverage html
coverage xml

coverage更多用法在官方文档:

Coverage.py — Coverage.py 6.2 documentation

4、在jenkins pipeline中的写法

这里我们的思路是生成 .xml格式的报告,然后被SonarScanner扫描到

stage('UT') {
    sh "coverage run test.py"
    sh "coverage xml"
}
    
stage('Code Check') {
    withSonarQubeEnv('sonarqube-167'){
        def scannerHome = tool 'sonar-scanner-165'
        sh  "${scannerHome}/bin/sonar-scanner  -Dsonar.projectKey=${sonarProjectKey}  -Dsonar.projectName=${sonarProjectName} -Dsonar.sources=${sonarSources}  -Dsonar.language=${sonarLanguage}  -Dsonar.source.encoding=${sonarSourceEncoding}  -Dsonar.python.coverage.reportPaths=coverage.xml"   
    }     
}

5、jenkins立即构建

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
unittestPython 自带的一个单元测试框架,可以用来测试代码中的函数、类等单元。而 excl 则是一个 Python 的 HTTP 客户端库,可以用来进行接口测试。 下面是一个使用 unittest 和 excl 进行接口测试的示例: ```python import unittest import excl class TestApi(unittest.TestCase): def setUp(self): self.client = excl.Client('http://example.com/api') def test_get_user(self): response = self.client.get('/users/1') self.assertEqual(response.status_code, 200) self.assertEqual(response.json()['name'], 'Alice') def test_create_user(self): user_data = {'name': 'Bob', 'email': 'bob@example.com'} response = self.client.post('/users', json=user_data) self.assertEqual(response.status_code, 201) self.assertEqual(response.json()['name'], 'Bob') self.assertEqual(response.json()['email'], 'bob@example.com') if __name__ == '__main__': unittest.main() ``` 在这个示例中,我们首先定义了一个 TestApi 类,继承自 unittest.TestCase。在 setUp 方法中,我们创建了一个 excl 客户端,用于发送 HTTP 请求。然后我们分别定义了两个测试函数,一个测试 GET 请求,一个测试 POST 请求。在测试函数中,我们发送 HTTP 请求并检查响应状态码和返回的 JSON 数据是否符合预期。最后,在 if __name__ == '__main__': 中运行测试。 这个示例只是一个简单的例子,实际中可能需要更多的测试用例和更复杂的测试逻辑。但是通过 unittest 和 excl 的配合,可以方便地进行接口测试,并保证代码的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值