实践作业:对多个接口发起请求,测试类中写多个测试函数

# 1. http_request

import requests

class HttpRequest:
    def http_request(self, url, method, data=None, cookie=None):
        try:
            if method.upper() == "GET":
                res = requests.get(url, data, cookies=cookie)
            elif method.upper() == "POST":
                res = requests.post(url, data, cookies=cookie)
            else:
                print("请输入正确的参数")
        except Exception as e:
            print("请求报错了:{}".format(e))
            raise e
        return res

if __name__ == '__main__':
    # 登录
    login_url = "http://v.rainbowred.com/login"
    login_data = {"username": "15546355872",
                  "password": "123456",
                  "rememberCheck": "1",
                  "loginStatus": "1",
                  "rememberStatus": "1",
                  "autoLogin": "0",
                  "language": "zh"}
    login_res = HttpRequest().http_request(login_url, "post", login_data)
    print(login_res.json())

    # 选择公司
    c_url = "http://v.rainbowred.com/chc"
    c_data = {"companyId": "21"}
    c_res = HttpRequest().http_request(c_url, "post", c_data, cookie=login_res.cookies)
    print(c_res.json())

  

# 2. get_data.py

class GetData:
    Cookie = None  # 存储cookie, 初始值为none

if __name__ == "__main__":
    print(GetData.Cookie)  # 获取属性值
    print(hasattr(GetData, "Cookie"))  # 判断是否有cookie属性
    setattr(GetData, "Cookie", "n123")  # 修改属性值
    # print(GetData.Cookie)
    print(getattr(GetData, "Cookie"))  # 获取属性值
    delattr(GetData, "Cookie")  # 删除属性
    print(hasattr(GetData, "Cookie"))

  

# 3.test_login.py

import unittest
from API_AUTO.tools.http_request import HttpRequest
from day_20191202.get_data import GetData
"""
1.登录接口:4个用例
正确登录、不输入账号、不输入密码、错误账号、错误密码
2.充值接口:
正常充值、不输入账号、不输入金额、充值错误的金额负数
"""

class TestLogin(unittest.TestCase):
    def setUp(self):
        print("开始执行用例")
        # 登录URL和考勤URL,这个地方的URL和data是写死的值,所以不用在setUp中传参
        self.loin_url = "https://www.ketangpai.com/UserApi/login"
        self.kq_url = "https://www.ketangpai.com/SummaryApi/attence?courseid=MDAwMDAwMDAwOcqZWH37Np"

    def tearDown(self):
        print("用例执行完毕")

    def test_success(self):
        data = {"email": "1255811581@qq.com", "password": "huahua90!@", "remember": 0}
        res = HttpRequest().http_request(self.loin_url, "post", data)
        r = res.json()["info"]
        print("1正常登录结果是", r)
        if res.cookies:  # 如果res.cookies有值,就更新Cookie的属性值
            setattr(GetData, "Cookie", res.cookies)
        try:
            self.assertEqual(r, "success")
        except AssertionError as e:
            print("test_success's error is {}".format(e))
            raise e  # 处理了异常后再抛出去

    def test_account(self):
        data2 = {"email": "", "password": "huahua90!@", "remember": 0}
        res = HttpRequest().http_request(self.loin_url, "post", data2)
        r = res.json()["info"]
        print("2空用户名登录结果是", r)
        try:
            self.assertEqual(r, "用户名不能为空")
        except AssertionError as e:
            print("test_account's error is {}".format(e))
            raise e

    def test_pwd(self):
        data3 = {"email": "1255811581@qq.com", "password": "", "remember": 0}
        res = HttpRequest().http_request(self.loin_url, "post", data3)
        r = res.json()["info"]
        print("3空密码登录结果是", r)
        try:
            self.assertEqual(r, "密码不能为空")
        except AssertionError as e:
            print("test_pwd's error is {}".format(e))
            raise e

    def test_waccount(self):
        data4 = {"email": "12558115810@qq.com", "password": "huahua90!@", "remember": 0}
        res = HttpRequest().http_request(self.loin_url, "post", data4)
        r = res.json()["info"]
        print("4错误用户名登录结果是", r)
        try:
            self.assertEqual(r, "用户不存在")
        except AssertionError as e:
            print("test_waccount's error is {}".format(e))
            raise e

    def test_wpwd(self):
        data5 = {"email": "1255811581@qq.com", "password": "huahua90!@111", "remember": 0}
        res = HttpRequest().http_request(self.loin_url, "post", data5)
        r = res.json()["info"]
        print("5错误密码登录结果是", r)
        try:
            self.assertEqual(r, "密码错误,你不能再尝试了", "这个用例会失败")
        except AssertionError as e:
            print("test_wpwd's error is {}".format(e))
            raise e

    def test_kq(self):
        data = {}
        res = HttpRequest().http_request(self.kq_url, "get", data, getattr(GetData, "Cookie"))
        # r = res.json()
        print("6考勤记录是", res)
        # self.assertEqual(res.)

if __name__ == "__main__":
    unittest.main()
# 4.run.py
# 自行补充完整

unittest(6)- 作业- 测试类中写多个函数的更多相关文章

  1. why pure virtual function has definition 为什么可以在基类中实现纯虚函数

    看了会音频,无意搜到一个frameworks/base/include/utils/Flattenable.h : virtual ~Flattenable() = 0; 所以查了下“纯虚函数定义实现 ...

  2. 在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static

    在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create ...

  3. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  4. 测试框架Unitest的运行原理,以及多个测试类中的执行顺序以及简化方法

    单元测试单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一 ...

  5. python定义类()中写object和不写的区别

    这里需要说明一下: python3中,类定义默认继承object,所以写不写没有区别 但在python2中,并不是这样 所以此内容是针对python2的,当然python3默认继承,不代表我们就傻乎乎 ...

  6. unittest对单个测试类的多种测试执行方法总结

    基于unittest测试框架编写的测试脚本,一般单个测试类下会有多个测试方法,unittest也提供多种测试执行方式,下面就不同方式或者需求一一实操并说明: 一.使用unittest下main()方法 ...

  7. 创建一个抽象的员工类, 抽象开发累继承员工类,JavaEE ,和安卓继承开发类在测试类中进行测试

    /* 1 定义一个员工类  所有的子类都抽取(抽象类)  Employee            属性:姓名  工号(生成get  set  )       方法:工作  抽象     2 定义一个研 ...

  8. Junit测试类中如何调用Http通信

    在使用Junit做测试的时候,有时候需要调用Http通信,无论是request还是response或者是session会话,那么在测试类里该如何调用呢,其实很简单,spring给我们提供了三个类 or ...

  9. 阶段3 1.Mybatis_03.自定义Mybatis框架_3.自定义mybatis的编码-根据测试类中缺少的创建接口和类

    先认识一下这几个类.Resources是一个class SqlSessionFactoryBuilder 创建新项目 复制相关的依赖 复制之前的代码 复制到当前项目的src下 把Mybits的依赖删除 ...

随机推荐

  1. LeetCode——787. K 站中转内最便宜的航班

    有 n 个城市通过 m 个航班连接.每个航班都从城市 u 开始,以价格 w 抵达 v. 现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到从 src 到 dst 最多经过 ...

  2. Ubuntu--- 安装VMware 报错 Build enviroment error!

    今天从 Ubuntu 安装 VMware 下载并安装过程都很顺利,但是在启动过程中报错误,所以总结如下: 报错原因:VMware 第一次启动需要编译一些模块,但是刚开始并没有安装 gcc 所以便报无法 ...

  3. c语言中指针和多维数组的理解

    1.复习指针和数组之间的特殊关系:不带方括号的数组名是一个指针,指向该数组的第一个元素. 2.多维数组: ][];//声明一个二维数组作为举例 a.理解方式1:可以将数组看成行和列构成,即理解成2行4 ...

  4. UML-FURPS+与补充性规格说明

    1.FURPS+ 在统一过程(UP)中,需求按照“FURPS+”模型进行分类. 功能性(Functional):特性.功能.安全性: 可用性(Usability):人性化因素.帮助.文档: 可靠性(R ...

  5. 题解 P6004 【[USACO20JAN]Wormhole Sort S】

    这题真的是非常标准的模板题啊 看到连最少的边,第一时间会想到 \(kruskal\) .这道题的难点其实就一个:你要注意到连边权最大的边使整个图联通 为什么:题意是第i个点想走到 \(pos[i]\) ...

  6. Java clone方法的使用

    浅克隆 Person p2 = (Person) p1.clone(); clone()方法使用后得到p2,p2和p1指向不同的地址.但是如果p1中的属性是引用类型,那么不再对这个引用类型进行复制,而 ...

  7. Java web之javascript(2020.1.6)

    1.js输出: windows.alert()---警告框 document.write()---写到html文档中 innerHTML---写到HTML元素 console.log()---写到浏览 ...

  8. RE数组开多大?

    #include<iostream> using namespace std; ][]; int main() { int n, m; ; i <= ; i++) { a[][i] ...

  9. 使用hexo+GitHub搭建个人博客的心得(含教程)

    Author Email Yaoyao Liu yaoyaoliu@msn.com 前言 对于广大CS专业的学生和码农,找一个地方写博客,记录一些编程.配置环境.阅读论文的心得体会是一个很常见的习惯. ...

  10. DRF框架之ModelSerializer序列化器

    ModelSerializer是Serializer的子类,序列化和反序列化跟Serializer一样. ModelSerializer与常规的Serializer相同,但提供了: 基于模型类自动生成 ...