在网上找的接口测试的代码,自己稍微修改了一下,

参数写成这样的时候

postparams = {'desc': {'areaCode': '010', 'username': u'立春', 'Password': '123456'},  'method': 'tutorLogin'}

报错如下:

Error
Traceback (most recent call last):
  File "E:\Users\Administrator\PycharmProjects\APITestDemo\TestMyLogin\TestLoginInter02.py", line 57, in test_call
    data = api.apicall('POST', 'http://180.76.139.233/ceshi/liveReportRest', getparams, postparams)
  File "E:\Users\Administrator\PycharmProjects\APITestDemo\TestMyLogin\TestLoginInter02.py", line 39, in apicall
    response = urllib2.urlopen(req)
  File "C:\Python27\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 437, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 550, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 475, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 558, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 500: Internal Server Error

如果把立春前面的 u 去掉的时候

postparams = {'desc': {'areaCode': '010', 'username': '立春', 'Password': '123456'},  'method': 'tutorLogin'}

执行后的结果

{u'msg': u'\u7528\u6236\u540d\u3001\u5bc6\u7801\u9519\u8bef', u'rlt': u'false', u'totalPage': 0, u'code': u'000000', u'data': u''}

转成中文提示用户名密码错误,可是我用 jmeter 里面跑这个接口是能正常生成结果的,请看图片

最后贴上代码,各位大神帮忙看看问题出在哪里?用户名到底该怎样传入?

# -*- coding: utf_8 -*-
import urllib2
import urllib
import json
import unittest


class APITest():

    def apicall(self, method, url, getparams, postparams):

        str1 = ''

        # GET

        if method == 'GET':

            if getparams != "":

                for k in getparams:

                    str1=str1+k+'='+urllib2.quote(str(getparams.get(k)))
                    if len(getparams) > 2:
                        str1 = str1 + "&"

                url = url+"&"+str1

            result = urllib2.urlopen(url).read()

        # POST
        if method == 'POST':

            if postparams != "":

                data = urllib.urlencode(postparams)

                req = urllib2.Request(url, data)

            response = urllib2.urlopen(req)

            result = response.read()

        jsdata = json.loads(result)

        return jsdata


class APIGetAdList(unittest.TestCase):

    def test_call(self):

        api = APITest()

        getparams = ''
        postparams = {'desc': {'areaCode': '010', 'username': '立春', 'Password': '123456'},  'method': 'tutorLogin'}

        data = api.apicall('POST', 'http://180.76.139.233/ceshi/liveReportRest', getparams, postparams)

        print '-----------' + u'立春'
        print '-----------' + '立春'
        print data
        print '-----------'

if __name__ == "__main__":

    unittest.main()


↙↙↙阅读原文可查看相关链接,并与作者交流