接口测试学习-python第六课(异常处理/网络编程)

一、异常处理

在平时的代码运行中,经常遇到报错的情况,一旦报错,整个代码都会被迫中止。如果代码中包含一些必须结束的代码,就会因为程序的出错中断而无法结束。比如打开一个文件后是需要关闭的,链接数据库后是需要关闭链接的,可是如果中途代码出错,这些关闭操作就不会被运行。

为了解决这种情况,可以用try将可能出错的代码包裹起来,并判断这段代码是否有异常,并根据判断结果执行接下来的操作。此时即使代码出错,也不会停止运行。

 

 1 first = input('输入被除数:')
 2 second = input('输入除数:')
 3 try:  # 用try将可能出错的代码包起来
 4     first = int(first)
 5     second = int(second)
 6     res = first / second
 7 except ValueError as e:  # 这个e代表错误信息,如果上面两行代码出现了ValueError这个错误信息就提示出错
 8     print(e)
 9     print('出错了')
10 except ZeroDivisionError as e:  # 如果出现了‘ZeroDivisionError’这个错误信息也进行提示
11     print(e)
12     print('除数不能为0')
13 except Exception as e:  # 可以捕捉到所有的异常情况
14     print(e)
15     print('出错了')
16 else:  # 没有异常的时候
17     print('没错')
18 finally:  # 不管是否出错都会执行finally
19     print('我是finally')

 

二、网络编程-接口测试

平时接口测试时一般借助postman和jmeter等工具,根据接口文档设定的url,入参和必填数据等进行测试。但是用python也可以进行简单的接口测试。python中有两个模块可以进行接口测试,分别是urllib和requests。第一个模块进行接口测试代码比较复杂,在此只简单介绍一下其进行get请求和post请求时如何操作。

1、urllib模块进行接口测试

 

 1 from urllib import request,parse
 2 import json
 3 url = 'http://www.cnblogs.com/myyard777'  # 地址必须以url开头
 4 req = request.urlopen(url)  # 打开一个url
 5 content = req.read().decode()
 6 # 网络爬虫就是从其他的网站上获取一些有用的内容
 7 fw = open('interweb.html','w',encoding='utf-8')
 8 fw.write(content)
 9 
10 通过这个模块完成get请求
11 url = 'http://api.nnzhp.cn/api/user/stu_info?stu_name=*******'
12 req = request.urlopen(url)
13 content = req.read().decode()
14 res_dic = json.loads(content)
15 if res_dic.get('error_code') == 0:
16     print('测试通过')
17 else:
18     print('测试失败')
19 
20 发post请求
21 url = 'http://api.*****.cn/api/user/login'
22 #  data请求数据
23 data = {
24     'username':'*****',
25     'passwd':'********'
26 }
27 data = parse.urlencode(data)  # 自动将参数拼好xx=xxx&**=***
28 req = request.urlopen(url, data.encode())  # 必须将data变成二进制数据
29 print(req.read().decode())

 

2、requests模块进行接口测试

 1 import requests
 2 # 使用这个模块发送get请求
 3 url = 'http://api.nnzhp.cn/api/user/stu_info'
 4 data = {'stu_name': '小黑'}  # 请求数据
 5 req = requests.get(url, params=data)  # 发送get请求
 6 print(req.json())  # 返回字典
 7 print(req.text)  # 返回string类型的json串
 8 
 9 # 使用这个模块发post请求
10 url = 'http://api.nnzhp.cn/api/user/login'
11 data = {'username': 'niuhanyang', 'passwd': 'aA123456'}
12 req = requests.post(url, data)  # 发送post请求
13 print(req.json())
14 
15 # 入参是json类型的
16 import random
17 url = 'http://api.nnzhp.cn/api/user/add_stu'
18 phone = random.randint(10000000000, 99999999999)  # 产生一个随机的电话号码
19 data ={
20     "name": "xyz",
21     "grade": "天蝎座",
22     "phone": phone,
23     "sex": "",
24     "age": 28,
25     "addr": "河南省济源市北海大道32号"
26   }
27 req = requests.post(url, json=data)
28 print(req.json())
29 
30 # 需要添加cookie的请求
31 url = 'http://api.nnzhp.cn/api/user/gold_add'
32 data = {'stu_id': 468, 'gold': 100}
33 cookie = {'niuhanyang': '337ca4cc825302b3a8791ac7f9dc4bc6'}
34 req = requests.post(url, data, cookies=cookie)
35 print(req.json())
36 
37 # 添加header的请求
38 url = 'http://api.nnzhp.cn/api/user/all_stu'
39 header = {'Referer': 'http://api.nnzhp.cn/'}
40 req = requests.get(url, headers=header)
41 print(req.json())
42 
43 # 上传文件
44 url = 'http://api.nnzhp.cn/api/file/file_upload'
45 # data = {'file': open('test.txt', encoding='utf-8')}  # 如果上传的是图片,需要以'rb'模式打开
46 data = {'file': open(r'C:\Users\john\Downloads\工作\图片\测试\1.jpg', 'rb')}
47 req = requests.post(url, files=data)
48 print(req.json())
49 
50 # 下载图片(也可以下载音乐,修改url和存储格式即可)
51 url = 'http://www.nnzhp.cn/wp-content/uploads/2018/01/soup.jpg'
52 res = requests.get(url)
53 print(res.content)  # 返回的是一个二进制内容
54 fw = open('s.jpg', 'wb')
55 fw.write(res.content)

 

posted on 2018-05-16 18:05  四方城郭  阅读(594)  评论(0编辑  收藏  举报