如何用python unittest去测试c#的接口

Python017

如何用python unittest去测试c#的接口,第1张

1.首先使用 python 的 requests 对接口进行测试

[python] view plain copy

# TestInface.py

import requests,json

url = visit.get_test_url()

news_url = url+'news.info'

headers = baseToken.basetoken_datas()['headers']

def new_data(data):

r = requests.post(news_url,data=data,headers=headers)

cnn = json.loads(r.text)

return cnn

2.使用unittest调用接口,且对接口测试的结果进行统计

[python] view plain copy

# TestCase.py

# -*- coding:utf-8 -*-

import unittest

import TestInface

# 对执行的case结果进行统计

# ---------------------------------------------------------------------------------------------------------------------

text = ""

num_success = 0

num_fail = 0

# 测试通过

def decide_success(joggle):

global num_success

num_success += 1

print_out(joggle + ":接口测试通过\n")

return num_success

# 测试不通过

def decide_fail(txt, joggle):

global num_fail

num_fail += 1

print_out(joggle + ":接口测试未通过 \n错误信息: " + txt + "\n")

return num_fail

# 邮件内容写入 &客户端输出

def print_out(message):

global text

text += "\n" + message

return text

# 返回值判断

def decide_result(result, code, joggle):

if result['code'] == code:

decide_success(joggle)

return "pass"

else:

txt = u"期望返回值:" + str(code) + u" 实际返回值:" + str(result) + '\n' + result['message']

decide_fail(txt, joggle)

return "fail"

def decide_Count():

data = {

'num_success': num_success,

'num_fail': num_fail,

'text': text

}

return data

# --------------------------------------------------------------------------------------------------------------------

# 定义 unittest

class MyTestCase(unittest.TestCase):

# 初始化工作

def setUp(self):

pass

# 退出清理工作

def tearDown(self):

pass

def test_Case1(self):

id = 16

data = {'id':id}

a = TestInface.new_data(data)

decide_result(a,0,'test_Case1')

3.使用suite对case进行管理

[python] view plain copy

# TestSuite.py

# -*- coding:utf-8 -*-

import unittest

import TestCase

def test_InterFace():

# 构造测试集

suite = unittest.TestSuite()

suite.addTest(TestCase("test_Case1")) # unittest中的测试用例

runner = unittest.TextTestRunner()

runner.run(suite)

# 对测试集进行测试需要返回值

# return suite

if __name__ == '__main__':

# unittest.main(defaultTest='test_InterFace')

# 执行测试

runner = unittest.TextTestRunner()

runner.run(test_InterFace())

4.对接口的数据进行统计

[python] view plain copy

# TestCensus.py

# -*- coding:utf-8 -*-

import time

import TestSuite

import send_email

import TestCase

class Test_Calss():

def census(self):

text = ''

# 初始化测试起始时间

start_time = time.time()

# 调用suite测试集

TestSuite.test_InterFace()

# 结束执行时间计算

end_time = time.time()

result = TestCase.decide_Count()

# 接口测试统计说明

total_use_case = u"执行用例总数:" + str(result['num_success'] + result['num_fail']) + \

u"\t通过数:" + str(result['num_success']) + \

u"\t不通过数:" + str(result['num_fail'])

total_time = u"\t总共耗时:" + str(round((end_time - start_time), 3)) + u'秒'

text = result['text'] + total_use_case + total_time

print (text)

# 发生测试报告邮件

send_email.email_file(text)

if __name__ == '__main__':

Test_Calss().census()

[python] view plain copy

<pre code_snippet_id="2001712" snippet_file_name="blog_20161123_4_8691238"></pre><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897"></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<link rel="stylesheet" href="http://static.blog.csdn.net/public/res-min/markdown_views.css?v=1.0">

</pre></pre></pre></pre></pre>

码同学公众号:自动化软件测试

码同学抖音号:小码哥聊软件测试

Python 2.1及以后的版本,将 unittest 作为一个标准模块放入Python开发包中。

01 使用unittest编写测试用例

规则:

unittest的执行结果

02 三个重要概念

03 测试用例执行顺序

unittest默认按照 ASCII码 的顺序加载测试用例(包括测试目录和测试文件、测试类、测试方法),即 它并不是按照测试用例的创建顺序从上到下执行的。

discover() 和 main() 方法的执行顺序是一样的。故想让某个测试文件先执行,可以在命名上加以控制。

如何控制测试用例的执行顺序?

04 执行多个测试用例

unittest.defaultTestLoader.discover() 方法可以从多个文件中查找测试用例。

该类根据各种标准加载测试用例,并将它们返回给测试套件

如果想让 discover() 查找子目录下的测试文件,得将子目录标记为一个python模块(子目录下放 __init__.py 文件)

05 跳过测试和预期失败

执行结果:

以上四个装饰器同样适用于测试类。

06 Setup和Teardown

执行结果如下:

免费领取 码同学软件测试 课程笔记+超多学习资料+完整视频+最新面试题,可以 转发文章 + 私信「码同学666」获取资料哦

07 Web自动化测试

08

Parameterized

Parameterized 是python的一个参数化库,同时 支持unittest、pytest单元测试框架。

09

DDT

Data-Driven Tests是 针对unittest单元测试框架 设计的扩展库。

安装:

导入:

使用规则:

执行报错如下时,是 因为文件名也为ddt:

10

数据文件的参数化

@file_data() 装饰器中内容为文件名称。支持 json格式 和 yaml格式 。

END