1.第一次接触到大型软件系统的开发,现在我们使用的是 python + flask +vue.js ,数据库:postgresql

2. 不要在自己不懂的情况下复制代码,每次分析一段代码的时候,就跟以前做数学题一样,做多了真的就熟悉了。

3.一份代码总是需要不断的修补的,所以需要TDD也就是Test Driven Development。 当重要的代码输出的东西都受到检验,代码也有了足够的测试作为后盾时,才能放心的去改动代码,从长远的角度看,TDD 可以节约更多的开发时间以及保证更好的代码质量。

TDD:  进行编程时先把测试部分写好,当发现不能通过时,再进行编程以使测试通过。然后在这基础上适当地调整测试代码以实现更多功能,最后再编写代码使之实现。

 

单元测试: python unittest

“测试”指的是通过编写可以调用的代码(独立于你实际应用程序的代码)来帮助你确定程序中是否有错误,

  (1)为什么要测试?

  • 测试可以保证你的代码在一系列给定条件下正常工作
  • 测试能够确保对代码的改动不会破坏现有的功能
  • 测试迫使人们在不寻常条件的情况下思考代码,这可能会揭示出逻辑错误
  • 良好的测试要求模块化,解耦代码,这是一个良好的系统设计的标志

  (2)测试什么?

  • 测试相等性:最常用的断言是测试相等性,(断言实际值是否等于预期值)如果断言失败,开发者通常希望看到实际错误值。

            assert_equal(actual, expected_items)
    eq_(actual.get('id'), expected_items.get('id'))
  • 测试异常:测试经常希望检查在某个环境中是否出现异常。如果期待的异常没有抛出,测试将失败。
        def test_if_imoport_check_works(self):  #测试上传文件成功
    _url = '/' # 测试的接口
    _dir = './' #准备好的测试文件(json) def pass_extensions(_file):
    filename, file_extension = os.path.splitext(_file)
    if file_extension in ['.xlsx' '.cvs']:
    data = {'file': open(os.path.join(root, file), 'rb')}
    response = self.client.post(_url, data=data)
    actual_data = json.loads(response.data) assert_equal(response.status_code, 200)
    assert_greater(len(actual_data), 0)
    assert_greater(len(actual_data.get('file')), 0)
    assert_is_none(actual_data.get('errors')) # 断言不会抛出错误 for root, dirs, files in os.walk(_dir):
    [pass_extensions(file) for file in files]

      

  • 测试实际值不为空。
        def test_should_find_shipment_service(self):
    # 验证物流存在
    with open('./mocks/shipment-services.json', 'r') as shipments: #获取准备好的物流信息
    # python open方法
    data = json.load(shipments)
    self.assertIsNotNone(data)
    #判定 data不为空
    actual = ShipmentService.query.get(random.randint(1, 5)) def _assert_shipment_service(expected):
    self.assertEqual(actual, expected)
    self.assertIsNotNone(actual)
    [_assert_shipment_service(actual) for actual in data]
    # 通过for 循环遍历出data的值 assert_greater(actual.get('id'), 0)
    assert_greater(actual.get('external_id'), 0)
    assert_greater(actual.get('name'), 0) #判定 物流存在

      

4.代码调试

当代码出错时,在程序必要的地方加设断点,当程序运行到该行代码的时候,Pycharm会将程序暂时挂起,开始对程序的运行状态进行分析。

  (1)Debugger窗口分为三个可见区域:FramesVariables, 和 Watches。这些窗口列出了当前的框架、运行的进程,方便用户查看程序空间中变量的状态等。在Watches 中添加要查看的变量。对比错误信息。

  (2)Console窗口显示当前的控制台输出信息。

5. 测试代码粒度

尽可能的保证测试代码覆盖到最多的问题。

6. vagrant 的入门使用。

入职这一段时间的总结,Don't Repeat Yourself.的更多相关文章

  1. java如何实现入职时间到现在 java如何计算知道入职时间, 求工作时长格式为年--月--日。

    Date ruZhi = new Date("入职年月bai"); Date now = new Date(); //算出du来时间夸格zhi多长 long shiChang = ...

  2. 定义私有属性: *String name; * int age; * String gender; * int salary; Date hiredate;//入职时间

    import java.text.SimpleDateFormat; import java.util.Date; /** * 定义私有属性: * String name; * int age; * ...

  3. 初入职场的建议--摘自GameRes

    又开始一年一度的校招了,最近跑了几个学校演讲,发现很多话用短短的一堂职业规划课讲还远远不够,因为那堂课仅仅可能帮大家多思考怎样找到一份合适的工作,并没有提醒大家怎样在工作中发展自己的职业. 见过这么多 ...

  4. 入职第一天:前端leader手把手教我入门Vue服务器端渲染(SSR)

    继前段时间西安电面之后顺利拿到了OFFER,今天(5月2号)是我入职第一天,在简短的内部培训了一上午后,前端leader让我先了解下什么是vue的服务器端渲染(SSR). SSR,英文全称叫 Serv ...

  5. 专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)

    url:http://www.csdn.net/article/2015-09-06/2825621 2015-09-06 13:18 摘要:本文采访了现任阿里巴巴公司系统架构师黄勇,从事近十年的Ja ...

  6. 成功入职ByteDance,分享我的八面面经心得!

    今天正式入职了字节跳动.办公环境也很好,这边一栋楼都是办公区域.公司内部配备各种小零食.饮料,还有免费的咖啡.15楼还有健身房.而且公司包三餐来着.下午三点半左右还会有阿姨推着小车给大家送下午茶.听说 ...

  7. 入职钉钉接近半年,谈谈自身的新人landing体会

    一.适应新环境 到了一个新环境里,身边的一切都比较陌生,与同事和领导都不太熟,一开始说话说不到一起都比较正常.在和同事吃饭的时候,多听多参与聊天,主动一些,逐渐熟悉起来就好了. 另外,我的工作台bas ...

  8. 新人入职100天,聊聊自己的经验&教训

    这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果你 打算去国外工作. 对Google的开发流程感 ...

  9. Oracle DBA从小白到入职实战应用

    现如今Oracle依然是RDBMS的王者,在技术上和战略上,Oracle仍然一路高歌猛进,并且全面引领行业迈入了云时代,伴随着12cR2即将在2016年正式发布,学习Oracle之路依旧任重道远,目前 ...

随机推荐

  1. Java容器的各种总结

    Java容器指的是List,Set,Map这些类.由于翻译的问题,问到集合,Collection这些指的都是它们几个. List ArrayList 随机访问快 LinkedList 插入删除快 这个 ...

  2. Linux - 进程间通信 - 匿名管道

    一.概念:进程间通信( IPC,InterProcess Communication) 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进城之间要交换数据必须通过内 ...

  3. vue.js2.0新手笔记(一)——安装

    知道vue很长时间了,一直只是了解,没有深入学习,也没做什么具体的东西.现在有时间了,决定重头好好学一下,就从安装开始吧. 一.安装node vue是用npm安装,npm是node的一个包管理工具,所 ...

  4. 统计学习方法:罗杰斯特回归及Tensorflow入门

    作者:桂. 时间:2017-04-21  21:11:23 链接:http://www.cnblogs.com/xingshansi/p/6743780.html 前言 看到最近大家都在用Tensor ...

  5. Web API 之SelfHost与OwinSelfHots加载外部程序

       下面就一些web api的一些基础内容进行阐述,然后就web api宿主承载中的实际业务问题进行解决 HttpController      HttpController的激活是由处于消息处理管 ...

  6. C#中 dynamic 关键字

       所有表达式都能隐式的转换成dynamic,因为所有的表达式最终都能生成从Object派生出的类型. ; int b = a; //隐式转换错误 int b2 = (int)a; ; int b3 ...

  7. nginx源码分析——event模块

    源码:nginx 1.12.0   一.简介      nginx是一款非常受欢迎的软件,具备高性能.模块化可定制的良好特性.之前写了一篇nginx的http模块分析的文章,主要对http处理模块进行 ...

  8. Linux字符设备与块设备的区别与比较

    Linux中I/O设备分为两类:块设备和字符设备.两种设备本身没有严格限制,但是,基于不同的功能进行了分类. (1) 字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取.相反,此类设 ...

  9. python2与python3的不兼容_urllib2

    网页下载器:将URL对应的网页以HTML下载到本地,用于后续分析 常见网页下载器:Python官方基础模块:urllib2 第三方功能包:requests python 3.x中urllib库和uri ...

  10. JQuery 中关于插入新元素的方法

    关于JQuery插入新内容的方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - ...