【Spring】內嵌Tomcat&去Xml&調試Mvc

菜瓜:今天聽到個名詞“父子容器”,百度了一下,感覺概念有點空洞,這是什麼核武器?

水稻:你說的是SpringMvc和Spring吧,其實只是一個概念而已,用來將兩個容器做隔離,起到解耦的作用,其中子容器可以拿到父容器的bean,父容器拿不到子容器的。但是SpringBoot出來之後這個概念基本就被淡化掉,沒有太大意義,SpringBoot中只有一個容器了。

菜瓜:能不能給個demo?

水稻:可以。由於現在SpringBoot已經大行其道,Mvc你可能接觸的少,甚至沒接觸過。

  • 早些年啟動一個Mvc項目費老鼻子勁了,要配置各種Xml文件(Web.xml,spring.xml,spring-dispather.xml),然後開發完的項目要打成War包發到Tomcat容器中
  • 現在可以直接引入Tomcat包,用main方法直接調起。為了調試方便,我就演示一個Pom引入Tomcat的例子
  • ①啟動類
  • package com.vip.qc.mvc;
    
    import org.apache.catalina.Context;
    import org.apache.catalina.LifecycleException;
    import org.apache.catalina.LifecycleListener;
    import org.apache.catalina.startup.Tomcat;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.FilterType;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    
    /**
     * 參考: * https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet
     * <p>
     * 嵌入tomcat,由Tomcat發起對Spring容器的初始化調用過程
     * <p>
     * - 啟動過程
     * * - Servlet規範,Servlet容器在啟動之後會SPI加載META-INF/services目錄下的實現類並調用其onStartup方法
     * * - Spring遵循規範實現了ServletContainerInitializer接口。該接口在執行時會收集WebApplicationInitializer接口實現類並循環調用其onStartup方法
     * * - 其中AbstractDispatcherServletInitializer
     * * * - 將spring上下文放入ContextLoaderListener監聽器,該監聽會發起對refresh方法的調用
     * * * - 註冊dispatcherServlet,後續會由tomcat調用HttpServletBean的init方法,完成子容器的refresh調用
     * *
     *
     * @author QuCheng on 2020/6/28.
     */
    public class SpringWebStart {
    
        public static void main(String[] args) {
            Tomcat tomcat = new Tomcat();
            try {
                // 此處需要取一個目錄
                Context context = tomcat.addContext("/", System.getProperty("java.io.tmpdir"));
                context.addLifecycleListener((LifecycleListener) Class.forName(tomcat.getHost().getConfigClass()).newInstance());
                tomcat.setPort(8081);
                tomcat.start();
                tomcat.getServer().await();
            } catch (LifecycleException | ClassNotFoundException | IllegalAccessException | InstantiationException e) {
                e.printStackTrace();
            }
        }
    
    
        static class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
            private final static String PACKAGE_PATH = "com.vip.qc.mvc";
    
            @Override
            protected String[] getServletMappings() {
                return new String[]{"/"};
            }
    
            @Override
            protected Class<?>[] getRootConfigClasses() {
                // spring 父容器
                return new Class[]{AppConfig.class};
            }
    
            @Override
            protected Class<?>[] getServletConfigClasses() {
                // servlet 子容器
                return new Class[]{ServletConfig.class};
            }
    
            @ComponentScan(value = PACKAGE_PATH,
                    excludeFilters = {
                            @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class),
                            // 避免掃描到加了註解(@Configuration)的子容器
                            @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = ServletConfig.class)})
            static class AppConfig {
            }
    
            @ComponentScan(value = PACKAGE_PATH)
            static class ServletConfig {
            }
        }
    }
  • ②Controller&Service
  • package com.vip.qc.mvc.controller;
    
    import com.vip.qc.mvc.service.ServiceChild;
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.annotation.Resource;
    
    /**
     * @author QuCheng on 2020/6/28.
     */
    @Controller
    public class ControllerT implements ApplicationContextAware {
    
        @Resource
        private ServiceChild child;
    
        @RequestMapping("/hello")
        @ResponseBody
        public String containter() {
            child.getParent();
            System.out.println("parentContainer");
            return "containter";
        }
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            System.out.println("子容器" + applicationContext);
            System.out.println("子容器中獲取父容器bean" + applicationContext.getBean(ServiceChild.class));
        }
    }
    
    
    package com.vip.qc.mvc.service;
    
    import com.vip.qc.mvc.controller.ControllerT;
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.NoSuchBeanDefinitionException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Service;
    
    /**
     * @author QuCheng on 2020/6/28.
     */
    @Service
    public class ServiceChild implements ApplicationContextAware {
    
        //    @Resource
        private ControllerT controllerT;
    
        public void getParent() {
    
            System.out.println(controllerT);
        }
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            System.out.println("父容器" + applicationContext);
            try {
                System.out.println("父容器中獲取子容器bean" + applicationContext.getBean(ControllerT.class));
            } catch (NoSuchBeanDefinitionException e) {
                System.out.println("找不到子容器的bean");
            }
        }
    }

    // 調用
    SpringWebStart的main方法啟動-會有如下打印
    父容器Root WebApplicationContext, started on Sun Jun 28 22:03:52 CST 2020
    找不到子容器的bean
    子容器WebApplicationContext for namespace 'dispatcher-servlet', started on Sun Jun 28 22:03:58 CST 2020, parent: Root WebApplicationContext
    子容器中獲取父容器beancom.vip.qc.mvc.service.ServiceChild@4acfc43a
    
    
  • Demo比較簡單,不過也能反映父子容器的關係

菜瓜:嗯,效果看到了,能不能講一下啟動過程

水稻:稍等,我去下載源碼。上面代碼演示中已經提前說明了,父子容器的加載是Tomcat依據Servlet規範發起調用完成的

  • spring-web源碼包的/META-INF中能找到SPI的實際加載類SpringServletContainerInitializer#onStartup()方法會搜集實現WebApplicationInitializer接口的類,並調用其onStartup方法
  • 上面MyWebApplicationInitializer啟動類是WebApplicationInitializer的子類,未實現onStartup,實際調用的是其抽象父類AbstractDispatcherServletInitializer的方法。跟進去 
  • @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
       //① 創建Spring父容器上下文-對象放入ContextLoadListener,後續調起完成初始化,
       super.onStartup(servletContext);
       //② 創建DispatcherServlet對象,後續會由tomcat調用其init方法,完成子容器的初始化工作
       registerDispatcherServlet(servletContext);
    }
    
    // ①進來
    protected void registerContextLoaderListener(ServletContext servletContext) {
        // 此處會回調我們啟動類的getRootConfigClasses()方法 - 父容器配置
        WebApplicationContext rootAppContext = createRootApplicationContext();
        if (rootAppContext != null) {
            ContextLoaderListener listener = new ContextLoaderListener(rootAppContext);
            istener.setContextInitializers(getRootApplicationContextInitializers());
            servletContext.addListener(listener);
        }
        else {
            logger.debug("No ContextLoaderListener registered, as " +
                  "createRootApplicationContext() did not return an application context");
        }
    }
    
    // ②進來
    protected void registerDispatcherServlet(ServletContext servletContext) {
            。。。
        // 此處會回調我們啟動類的getServletConfigClasses()方法 - 子容器配置
        WebApplicationContext servletAppContext = createServletApplicationContext();
            。。。
        // 初始化的dispatcherServlet,會加入Tomcat容器中-後續調用
        // FrameworkServlet#initServletBean()會完成上下文初始化工作
        FrameworkServlet dispatcherServlet = createDispatcherServlet(servletAppContext);
            。。。
    }

菜瓜:這樣容器就可以用了嗎?

水稻:是的,這樣就可以直接在瀏覽器上面訪問http://localhost:8081/hello,不過這是一個最簡陋的web項目

菜瓜:懂了,最簡陋是什麼意思

水稻:如果我們想加一些常見的Web功能,譬如說攔截器,過濾器啥的。可以通過@EnableWebMvc註解自定義一些功能

  • package com.vip.qc.mvc;
    
    import com.vip.qc.mvc.interceptor.MyInterceptor1;
    import com.vip.qc.mvc.interceptor.MyInterceptor2;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    import javax.annotation.Resource;
    
    /**
     * @author QuCheng on 2020/6/28.
     */
    @Configuration
    @EnableWebMvc
    public class WebMvcConfig implements WebMvcConfigurer {
    
        @Resource
        private MyInterceptor1 interceptor1;
        @Resource
        private MyInterceptor2 interceptor2;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(interceptor1).addPathPatterns("/interceptor/**");
            registry.addInterceptor(interceptor2).addPathPatterns("/interceptor/**");
        }
    }
    
    
    
    package com.vip.qc.mvc.interceptor;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author QuCheng on 2020/6/28.
     */
    @Configuration
    public class MyInterceptor1 implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("嘻嘻 我是攔截器1 pre");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("嘻嘻 我是攔截器1 post");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("嘻嘻 我是攔截器1 after");
        }
    }
    
    
    package com.vip.qc.mvc.interceptor;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author QuCheng on 2020/6/28.
     */
    @Configuration
    public class MyInterceptor2 implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("嘻嘻 我是攔截器2 pre");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("嘻嘻 我是攔截器2 post");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("嘻嘻 我是攔截器2 after");
        }
    
    } 

菜瓜:我知道,這裏還有個Mvc請求調用流程和這個攔截器有關。而且這個攔截器不是MethodInterceptor(切面)

水稻:沒錯,說到這裏順便複習一下Mvc的請求過程

  • 請求最開始都是通過Tomcat容器轉發過來的,調用鏈:HttpServlet#service() -> FrameworkServlet#processRequest() -> DispatcherServlet#doDispather()
  •  1 protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
     2     。。。
     3   processedRequest = checkMultipart(request);
     4   multipartRequestParsed = (processedRequest != request);
     5   // 1.返回一個持有methodHandler(按照URL匹配得出的被調用bean對象以及目標方法)調用鏈(攔截器鏈)對象
     6   mappedHandler = getHandler(processedRequest);
     7   。。。
     8   // 2.按照我們現在寫代碼的方式,只會用到HandlerMethod,其他三種基本不會用
     9   HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
    10   。。。
    11   // 3.前置過濾器 - 順序調用
    12   if (!mappedHandler.applyPreHandle(processedRequest, response)) {
    13       return;
    14   }
    15   // 4.Actually invoke the handler.
    16   mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
    17   。。。
    18     applyDefaultViewName(processedRequest, mv);
    19   // 5.後置過濾器 - 逆序調用
    20   mappedHandler.applyPostHandle(processedRequest, response, mv);
    21   。。。
    22   // 6.處理試圖 - 內部render
    23   processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
    24   }
    25   catch (Exception ex) {
    26      // 異常處理
    27      triggerAfterCompletion(processedRequest, response, mappedHandler, ex);
    28   }
    29       // 異常處理
    30   catch (Throwable err) {
    31      triggerAfterCompletion(processedRequest, response, mappedHandler,
    32                     new NestedServletException("Handler processing failed", err));
    33   }
    34     。。。

     

 菜瓜:這個之前看過不少,百度一大堆,不過還是源碼親切

 

總結:

  • 目前基本互聯網項目都是SpringBoot起手了,再難遇到SpringMvc的項目,不過熟悉該流程有利於我們更加深刻的理解Ioc容器
  • Mvc攔截器鏈也是日常開發中會用到的功能,順便熟悉一下請求的執行過程

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

※別再煩惱如何寫文案,掌握八大原則!

Postman之API測試使用全指南

Postman

Postman是一個可擴展的API開發和測試協同平台工具,可以快速集成到CI/CD管道中。旨在簡化測試和開發中的API工作流。

Postman 工具有 Chrome 擴展和獨立客戶端,推薦安裝獨立客戶端。

Postman 有個 workspace 的概念,workspace 分 personal 和 team 類型。Personal workspace 只能自己查看的 API,Team workspace 可添加成員和設置成員權限,成員之間可共同管理 API。

當然我個人使用一般是不登錄的,因為登錄之後會自動將你的測試歷史數據保存到賬戶里,你可以登陸網頁端進行查看。
因為API的很多數據是很敏感的,有的含有Token,或者就是一些私密信息,雖然Postman自己也強調說這樣很安全,不會私下窺探用戶的信息之類的,但是呢還是至少做一點有效的防範吧,自己不上傳,因為網絡並沒有絕對的安全。
所以我每次測試之後會將數據(Case)保存在本地,下次使用或者換設備的情況下將數據拷貝過來又可以繼續使用了。

下面正式開始介紹如何使用Postman吧。

為什麼選擇Postman?

如今,Postman的開發者已超過1000萬(來自官網),選擇使用Postman的原因如下:
簡單易用 – 要使用Postman,你只需登錄自己的賬戶,只要在電腦上安裝了Postman應用程序,就可以方便地隨時隨地訪問文件。
使用集合 – Postman允許用戶為他們的API調用創建集合。每個集合可以創建子文件夾和多個請求。這有助於組織測試結構。
多人協作 – 可以導入或導出集合和環境,從而方便共享文件。直接使用鏈接還可以用於共享集合。
創建環境 – 創建多個環境有助於減少測試重複(DEV/QA/STG/UAT/PROD),因為可以為不同的環境使用相同的集合。這是參數化發生的地方,將在後續介紹。
創建測試 – 測試檢查點(如驗證HTTP響應狀態是否成功)可以添加到每個API調用中,這有助於確保測試覆蓋率。
自動化測試 – 通過使用集合Runner或Newman,可以在多個迭代中運行測試,節省了重複測試的時間。
調試 – Postman控制台有助於檢查已檢索到的數據,從而易於調試測試。
持續集成——通過其支持持續集成的能力,可以維護開發實踐。

如何下載安裝Postman?

Step 1) 官網主頁:https://www.postman.com/downloads/, 下載所需版本進行安裝即可。

Step2)安裝完成之後會要求你必須登錄才能使用,沒有賬號可以進行註冊,註冊是免費的。(也可使用Google賬號,不過基本不能登錄,你懂的)

Step3)在Workspace選擇你要使用的工具並點擊“Save My Preferences”保存。

Step4)你將看到啟動后的頁面如下

如何使用Postman?

下圖是Postman的工作區間,各個模塊功能的介紹如下:

1、New,在這裏創建新的請求、集合或環境;還可以創建更高級的文檔、Mock Server 和 Monitor以及API。
2、Import,這用於導入集合或環境。有一些選項,例如從文件,文件夾導入,鏈接或粘貼原始文本。
3、Runner,可以通過Collection Runner執行自動化測試。後續介紹。
4、Open New,打開一個新的標籤,Postman窗口或Runner窗口。
5、My Workspace – 可以單獨或以團隊的形式創建新的工作區。
6、Invite – 通過邀請團隊成員在工作空間上進行協同工作。
7、History – 所有秦秋的歷史記錄,這樣可以很容易地跟蹤你所做的操作。
8、Collections – 通過創建集合來組織你的測試套件。每個集合可能有子文件夾和多個請求。請求或文件夾也可以被複制。
9、Request tab – 這將显示您正在處理的請求的標題。默認對於沒有標題的請求會显示“Untitled Request”。
10、HTTP Request – 單擊它將显示不同請求的下拉列表,例如 GET, POST, COPY, DELETE, etc. 在測試中,最常用的請求是GET和POST。
11、Request URL – 也稱為端點,显示API的URL。.
12、Save – 如果對請求進行了更改,必須單擊save,這樣新更改才不會丟失或覆蓋。
13、Params – 在這裏將編寫請求所需的參數,比如Key – Value。
14、Authorization – 為了訪問api,需要適當的授權。它可以是Username、Password、Token等形式。
15、Headers – 請求頭信息
16、Body – 請求體信息,一般在POST中才會使用到
17、Pre-request Script – 請求之前 先執行腳本,使用設置環境的預請求腳本來確保在正確的環境中運行測試。
18、Tests – 這些腳本是在請求期間執行的。進行測試非常重要,因為它設置檢查點來驗證響應狀態是否正常、檢索的數據是否符合預期以及其他測試。
19、Settings – 最新版本的有設置,一般用不到。

如何處理GET請求

Get請求用於從指定的URL獲取信息,不會對端點進行任何更改。
在這裏我們使用如下的URL作為演示:

https://jsonplaceholder.typicode.com/users	

在Postman的工作區中:
1、選擇HTTP請求方式為GET
2、在URL區域輸入 鏈接
3、點擊 “Send”按鈕
4、你將看到下方返回200狀態碼
5、在正文中應該有10個用戶結果,表明您的測試已經成功運行。

注意:在某些情況下,Get請求失敗可能由於URL無效或需要身份驗證。

如何處理POST請求

Post請求與Get請求不同,因為存在用戶向端點添加數據的數據操作。使用之前GET 請求中相同數據,現在添加我們自己的用戶。
Step 1)創建一個新請求

Step 2 )在新請求中
1、選擇HTTP請求方式為GET
2、在URL區域輸入 鏈接:https://jsonplaceholder.typicode.com/users
3、切換到Body選項

Step 3) Body選項
1、選中raw選項
2、選擇JSON

Step 4) 複製前面GET請求返回的json內容的第一節
更改id為11,更改name以及uesrname和email

[
    {
        "id": 11,
        "name": "Krishna Rungta",
        "username": "Bret",
        "email": "Sincere@april.biz
	",
        "address": {
            "street": "Kulas Light",
            "suite": "Apt. 556",
            "city": "Gwenborough",
            "zipcode": "92998-3874",
            "geo": {
                "lat": "-37.3159",
                "lng": "81.1496"
            }
        },
        "phone": "1-770-736-8031 x56442",
        "website": "hildegard.org",
        "company": {
            "name": "Romaguera-Crona",
            "catchPhrase": "Multi-layered client-server neural-net",
            "bs": "harness real-time e-markets"
        }
    }
]

注意: 檢查Body里用到的JSON格式很重要,以確保數據正確。
檢測的工具比如:https://jsonformatter.curiousconcept.com/

Step 5 )發送請求
1、完成上述的信息輸入,點擊Send按鈕
2、Status:應該是201,显示為創建成功
3、在Body里返回數據

如何將請求參數化

數據參數化是Postman最有用的特徵之一。你可以將使用到的變量進行參數化,而不是使用不同的數據創建相同的請求,這樣會事半功倍,簡潔明了。
這些數據可以來自數據文件環境變量。參數化有助於避免重複相同的測試,可用於自動化迭代測試。

參數通過使用雙花括號創建:{{sample}}
比如下面的請求:

接下來創建一個參數化get請求:
Step 1) 創建一個參數化get請求
1、將HTTP請求設置為GET
2、輸入URL: https://jsonplaceholder.typicode.com/users;將鏈接的域名部分替換為參數,例如{{url}}。請求url現在應該是{{url}}/users。
3、點擊Send按鈕。
應該沒有響應,因為我們沒有設置參數的源,如下圖:

Step 2) 使用環境設置所需的參數
1、點擊眼睛圖標
2、單擊Edit將該變量設置為可在所有集合中使用的全局環境。

Step 3) 變量–variable
1、將名稱設置為url,該url為https://jsonplaceholder.typicode.com
2、點擊保存按鈕

Step 4) 如果看到下面截圖的樣式,請單擊Close

Step 5 ) 回到你的Get請求頁面,然後單擊發送Send按鈕,Get請求應該就會返回結果了,如下圖:

注意:請確保所有的參數都有準確的源數據,不管是環境變量還是數據文件,以避免出錯。

如何創建Postman Tests

Postman Tests在請求中添加JavaScript代碼來協助驗證結果,如:成功或失敗狀態、預期結果的比較等等。
通常從pm.test開始。它可以與斷言相比較,驗證其他工具中可用的命令。
接下來創建一個包含Tests的請求:
Step 1) 創建一個Get請求
1、切換到Tests選項,右邊是代碼片段選項。
2、從右邊的代碼片段選項裏面選中 “Status code: Code is 200”
3、JS代碼就自動出現在窗口中

Step 2) 點擊發送請求按鈕。測試結果就显示出來了,如下圖:

Step 3) 回到Tests選項卡,讓我們添加另一個測試。這次我們將比較預期結果和實際結果。
在右邊的SNIPPETS區域選擇”Response body:JSON value check”選項,我們將檢查Leanne Graham是否擁有userid 1。

Step 4)
1、將代碼中的“Your Test Name”替換為“Check if user with id1 is Leanne Graham”,以便測試名稱確切描述我們想測試的內容。
2、使用jsonData[0].name代替jsonData.value; 獲取路徑,在獲取結果之前檢查Body。因為Leanne Graham是userid 1,所以jsonData在第一個結果中,這個結果應該從0開始。如果你想獲得第二個結果,那麼對後續結果使用jsonData[1] 即可。
3、在eql中,輸入“Leanne Graham”

pm.test("Check if user with id1 is Leanne Graham", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData[0].name).to.eql("Leanne Graham");
});

Step 5) 點擊發送請求,可以看到你的請求之後測試結果中有兩項显示測試通過。

注意:
有不同種類的測試可以在Postman中創建。嘗試探索這個工具,看看哪些測試適合你實際測試。

如何創建測試集合

集合在組織測試套件中扮演着重要的角色。它可以被導入和導出,使得在團隊之間共享集合變得很容易。在本教程中,我們將學習如何創建和執行集合。

Step 1) 單擊頁面左上角的New按鈕,如下圖:

Step 2) 選擇Collection(集合). 創建collection窗口彈出,如下圖.

Step 3) 輸入所需的集合名稱和描述,然後單擊create。
現在已經創建了一個集合。

Step 4 ) 和前面的Get請求一樣,點擊保存。

Step5 )
1、選擇Postman 測試集合(Test Collection)。
2、點擊保存Postman Test Collection

Step 6) Postman test collection現在應該包含了一個請求,如下圖:

Step 7) 重複上述的Step4-5,繼續創建請求,這樣,測試集合就應該有2個請求了,如下圖。

如何使用Collection Runner 運行集合

有兩種方式來運行一個集合,即Collection Runner和Newman。
Collection Runner:
Step 1) 單擊頁面頂部導入按鈕旁邊的Runner按鈕,如下圖。

Step 2)Collection Runner頁面應該出現如下所示。以下是對各個字段的描述

Step 3) 做如下設置,運行你的測試集合

  • 選擇Postman測試集合-集合迭代次數為3
  • 設置延遲為2500毫秒
  • 點擊Start Run按鈕

    Step 4) 單擊Run按鈕后將显示Run結果頁。根據延遲的不同,你應該在測試執行的同時看到显示的結果。

1、一旦測試完成,你就可以看到測試狀態是通過還是失敗,以及每個迭代的結果。
2、你將看到Get請求的Pass狀態;
3、由於我們沒有任何Post測試,所以應該會出現請求沒有任何測試的消息。

可以出在請求中進行測試是多麼重要,這樣你就可以驗證HTTP請求狀態是否成功,以及是否創建或檢索了數據。

如何使用Newman運行集合

運行集合的另一種方式是通過Newman。Newman和Collection Runner之間的主要區別如下:
1、Newman是Postman的替代品,所以需要單獨安裝Newman;
2、Newman使用命令行,而Collection Runner使用UI界面;
3、Newman可以用於持續集成。

安裝Newman並運行Collection,步驟如下:
Step 1) 下載並安裝NodeJs: http://nodejs.org/download/
Step 2) 打開命令行窗口並輸入下面命令:

npm install -g newman

安裝后 如下圖:

Step 3 )
Newman安裝好之後,讓我們回到Postman的workspace。在Collections框中,單擊三個點 會出現新的選擇選項,可看到Export選項,如下圖:

Step 4 )
選擇導出集合,默認使用推薦的集合版本,比如此處是v2.1,然後單擊導出:

Step 5 ) 選擇你想要保存的地址之後點擊保存,這裏建議專門新建一個文件夾來存放你的Postman tests。
Step 6 ) 另外還需要導出我們的環境(enviroment)。單擊全局環境下拉菜單旁邊的eye圖標,選擇JSON格式下載。選擇你想要的位置,然後單擊Save。最好將環境放在與Step5 導出的集合相同的文件夾中。

Step 7 ) 導出Environment 到集合文件夾后,現在回到命令行,將目錄更改為保存集合和環境的位置。

cd C:\Users\Asus\Desktop\Postman Tests

Step 8 ) 使用下面的命令運行你的測試集合:

newman run PostmanTestCollection.postman_collection.json -e Testing.postman_globals.json

運行的結果應該如下圖:

關於Newman的一些基礎指導如下:
1、只運行集合(如果沒有環境或測試數據文件依賴關係,則可以使用此選項。)

newman run <collection name> 

2、運行集合和環境(參數-e 是environment)

newman run <collection name> -e <environment name> 

3、使用所需的編號運行集合的迭代。

newman run <collection name> -n <no.of iterations>

4、運行數據文件

newman run <collection name> --data <file name>  -n <no.of iterations> -e <environment name> 

5、設置延遲時間。(這一點很重要,因為如果由於請求在後台服務器上,完成前一個請求時沒有延遲時間直接啟動下一個請求,測試可能會失敗。)

newman run <collection name> -d <delay time>

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

四周年:聊聊測試工程師的核心競爭力

寫博客四周年,習慣每年這個時候做一次總結回顧。這次,就聊聊工作幾年以來,我個人對核心競爭力的一些思考和認知。。。

往期傳送門

一周年:聊聊寫博客這件事

兩周年:聊聊這一年的成長

三周年:聊聊近期目標和計劃

 

核心競爭力,各人有各人的想法。且在不同階段、不同企業、不同時期有不同的視角,無法一一而足。以我個人角度來說:核心競爭力實際上就是個人價值訴求的一種表達

我劃分了四個較為通用的維度,從這幾個維度出發,聊聊不同階段我的一些看法和建議。

思維導圖

 

時間維度

1、小白入門

通常來說,小白入門階段,指的是初入職場一年以內的同學。

在這個階段,個人的核心競爭力,或者說個人價值的體現,就是高效執行能力+快速學習能力

工作職責、範圍、流程、規範、溝通能力,在這個階段,也許會遇到不同的挑戰,但企業一般對新同學包容性都比較強,這個階段試錯空間較大,最利於新入成長。

2、快速成長

快速成長階段,一般指的是工作1-3年的同學。這個階段,個人認為核心競爭力主要體現在協同配合+ownership(主人翁意識,或者說是主動承擔工作的能力)。

當然,這個階段也會面臨職場第一次跳槽,如何編寫簡歷、面試、談offer、如何選擇就職行業、在團隊內刷存在感等事情。

表述可能有些直接,但這個階段,對未來的職場發展,影響往往是很大的。建議找個業內熟識的前輩,聊聊天,請教一下

3、專註沉澱

這個階段的同學我劃分為3-5年的同學,一般來說這個階段,會成為團隊里的中堅力量,甚至會承擔一部分所謂的“管理”的工作。

除了上述的幾點核心能力,我認為這個階段的同學,核心競爭力,往往體現在客觀的思考能力+創造價值的能力

如何理解創造價值?初入職場大多是聽安排做事,這個階段,會漸漸過渡到分配任務並且帶領小團隊快速高效完成工作的狀態。

至於專註沉澱,這個階段建議對自己的技術棧+未來五年職場規劃進行多次深入的review,這是一個不斷否定不斷堅持的過程。

4、成為專家

如何理解專家?即在某一個領域內擁有豐富經驗+專業特長+深入研究的人。一般在職場中,七年左右可以稱之為專家。

在《刻意練習:如何從新手到大師》這本書中,講述了很多關於成為某一個領域專家的方法,推薦大家閱讀這本書。

在這個階段,核心競爭力,反而簡單,即上面講到的創造價值

如何創造價值?解決團隊目前存在的核心問題,從基礎建設、流程規範、技術、分享、管理多方面來保質提效。

當然,最關鍵的是,主動傳達自己創造的價值!這個很考驗一個人的耐心和協調溝通能力,概括一下就是:深諳職場生存法則

 

核心能力

關於核心能力,其實在上面的幾個階段,都做了解讀。這裏我有個建議,你的核心能力,可以在簡歷的個人評價里體現出來

好的簡歷可以擺平面試求職路上的很多客觀因素,當然,也能吸引到某些獵頭的挖掘。

當然,不僅僅是簡歷,還有其他的一些客觀條件,這個請看下文。

1 # 這裏僅提供一個demo供參考
2 1、對項目整體業務和系統架構有較全面了解,能獨立解決複雜任務; 3 2、能與其他團隊建立良好的合作關係,並組織主導完成工作; 4 3、自我驅動能力強,熱愛分享,善於思考總結; 5 4、保持技術前瞻性,鑽研新技術及方法,並推動在工作中落地;

 

職場生涯

關於職場生涯,有很多博主很多大牛說過,這裏我順帶談談我的看法。

在專註沉澱階段(3-5年),為什麼要建議對自己的技術棧以及未來五年的職場規劃進行多次review呢?

一方面,這個階段會在技術和業務上有一定的深入和廣度;另一方面,職場或者說未來職業發展需要的是一專多能的在細小領域有較高成就的人

一般來講,這個階段需要對業務&技術做個權重。業務專家?技術大神?或者基層管理。

管理是一個蘿蔔一個坑,在互聯網領域,個人覺得對普通人來講,業務專家或技術大神,對普通人更友好。

不需要做多大範圍的TOP1,你只需要堅持去做下面幾點,就能有所收穫。

 

個人成長

關於個人成長,前段時間看了本書:《軟技能:代碼之外的生存指南》。裏面介紹了很多有趣的觀點和方法,大家不妨一讀。

挑幾個關鍵的point來談談我自己的個人成長曆程,也許會對你有所觸動。

1、寫作博客

大概工作第三年開始,我開通了博客,並且堅持每周都更新。有總結,有實踐,有思考,也有很多自己創造的內容。我把寫博客這件事叫做爆肝。。。

寫了一段時間,你會發現漸漸有了流量,有了評論,有了錯誤指摘,也有抬杠。從這些“收穫”里,你能將自己的底子打得更好,當然,知名度,或許有些罷。。。

2、開公開課

有了寫博客的沉澱(不一定寫博客,自己做筆記也可,但我還是建議寫博客,交流更重要,閉門造車要不得),你可以嘗試開公開課,比如:QQ群直播、網易公開課、騰訊課堂等。

如何將自己知道的東西,簡潔明了的傳遞給別人,在溝通分享中重塑自身的知識體系,是很有意思也很有挑戰的一件事。

職場向上發展,分享、培訓、演講是少不了的。有備無患,才是智者取勝之道。

這個過程里,你會發現自己以往的遺漏、錯誤、表述的誤差,也能從別人口中獲悉成長的力量。

3、著書立說

這個對很多同學來說可能有點不可思議,但其實沒那麼難。我認識測試圈子的同學比如小坦克,基於抓包進行接口&自動化測試,已經出了2本書了。

我自己也正在寫自己的第一本書:從零開始性能測試。

當然,給了我勇氣讓我開始下筆寫書的原因,一方面是想建立個人的品牌影響力;另一方面,通過博客,有好幾位出版社的編輯找到了我,不好意思拒絕他們的熱情相邀,就索性寫一本書吧。

人這一生,總要做幾件讓自己回想起來就覺得中二熱血的事情。。。

4、諮詢培訓

關於諮詢培訓,其實和轉崗斜杠很類似。生存所需嘛,憑自己的本事站着吃飯,不寒磣。

通過自我成長,寫博客,開公開課,建立個人影響力,嘗試付費諮詢,做培訓,運營公眾號,接商業推廣,甚至極客時間開一門課,都是可以嘗試的。

很多事情不是看到希望才做,而是做了才能有所收穫。

當然,這個過程中,你會開始思考如何拓展推廣渠道,引流拉新,提高創作內容的質量,遇到很多未知領域的挑戰。

別怕,向前走,前面有光!

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

“你開廠門 我開方便之門” ——福建省市場監管系統“促產”側記

  中國消費者報報道(記者 張文章)最近是企業復工復產的高峰期,然而復工復產、疫情防控兩手抓,兩手都要硬。復工復產面臨許多困難和擔憂:員工食堂就餐怎麼才安全?商事辦理如何才簡便?企業趕工,設備運作如何跟進?別擔心,福建省市場監管局早幫企業想好了,及時推出6方面16條服務措施,全力支持推動生產企業復產、重點項目復工。並呼籲相關企業大膽開門復產,把失去的時間搶回來,補回來。

  復工怎麼吃飯 築防線

  隨着復工復產高峰期臨近,集體用餐需求顯著增加,為深入做好新冠肺炎疫情防控工作,防範群體性聚餐可能引發的風險,福建省市場監管部門牽頭整合美團、餓了么等網絡訂餐平台和餐飲企業搭建疫情期間集體用餐配送服務平台,在保供應、保質量、強信心方面起到了积極作用。

  福州市台江區對復工企業食堂衛生狀況進行檢查,嚴查食材進貨來源,要求分時段分餐制,避免扎堆就餐。同時嚴格環境消殺,下發《預防性消毒工作手冊》,督促農貿市場、超市、餐飲店、非星級酒店嚴格落實清潔消毒制度,每日開市前、收市后全面消毒,加大對重點區域、重點設施設備消毒頻次。規範網絡外賣平台經營,推行無接觸配送。

  廈門市集美區杏林市場監管所“嚴把三關”,做好“小餐飲”復工安全。復工前,申請報備關。全面摸排掌握轄區“小餐飲”數據庫,通過電話、微信等,向2571家餐飲經營者詳細告知復工標準,督促餐飲單位在恢復營業前,提前向市場監管部門報備。復工時,現場檢查關。收到經營者報備后,執法人員按照網格劃分及時到現場檢查,對從人員健康狀況、體溫檢測、場所消殺、庫存食材清理等各方面進行詳細指導和嚴格把關。復工后,日常監督關。通過網格員每日現場巡查、微信宣傳、發動社區群眾舉報等方式,做好已復工“小餐飲”的日常監督。

  泉州市市場監管部門加強外賣訂餐平台監管,在疫情防控期間全面實行“無接觸送餐”;鼓勵入網餐飲單位使用“食安封簽”,避免送餐過程二次污染;指導公司選擇證照齊全、供餐資質和能力符合要求的單位訂餐,並設立專門接收台,實行“不見面取餐”;鼓勵企業發動交通方便的員工回家用餐,或自帶餐食解決用餐問題,進一步減少辦公場所用餐時段的人員密度和出入頻次。

  莆田市荔城區已形成市場、超市、餐飲、藥店常態化監管模式,持續提示餐飲服務單位轉變經營思路,採取打包、外賣、分餐配送等非堂食堂聚的經營模式,避免人群聚集傳播風險;有效督促市場開辦者及檔口經營者自律經營,嚴格落實禁止野生動物交易要求,建立健全索證索票、進貨查驗等制度,切實做好食品快檢及公示工作,做到“早發現、早溯源、早處置”,有效保障群眾“舌尖上的安全”。

  備案申請怎麼審批 特事特辦

  為全面有效防控疫情,全力保障人民群眾的生命安全和身體健康,切實提供便捷優質的企業註銷及商事登記服務,福建省市場監管部門為企業提供足不出戶的“網上辦“服務。

  福州市高新區市場監管部門開啟企業復工復產網上辦,利用釘釘App在線受理企業復工申請,開展不見面服務。對企業數據進行實時分析,對於符合高新區復工要求的予以備案。全面推行自主年報制度,通過微信、電話、短信等方式指導企業依法履行信息公示義務,激活更多企業投入生產經營,避免信用受損。

  漳州市長泰縣市場監管局為有效減少人員聚集,暫停窗口現場服務,全面推行“網上辦、掌上辦、郵寄辦、預約辦”審批服務模式,並公示了窗口諮詢電話。對於保障疫情防控工作需要的緊急業務,立足職能,特事特辦、急事急辦,着力打通抗‘疫’審批最後一公里。

  莆田市荔城區市場監管部門充分依託“網上辦、掌上辦、寄遞辦、預約辦”等有效手段,為市場主體提供“零見面、零跑腿、零成本”的高效優質服務,進一步壓減登記註冊環節、時間和成本。對生產企業轉產生產口罩、防護服等應急物資的,簡化生產資質審批程序,實行非要件容缺後補,對可通過數據共享獲取的材料,不要求申請人重複提交。

  三明市大田縣市場監管局加碼提速簡化審批程序,推行“非接觸式”的电子辦照渠道,實行企業名稱自由申報、企業設立網上辦,同時积極引導群眾通過“網上預審+雙向快遞”的方式寄送申請材料並領取證照和相關文書。深化個體工商戶登記制度改革,針對需線下辦證的特殊人群實現“15分鐘辦證圈”。

  設備安全怎麼保障 提供專業服務

  為全面保障疫情期間和節后復工復產企業的特種設備安全,進一步落實特種設備使用單位安全主體責任,福建省市場監管部門對特種設備安全進行了專項檢查。

  廈門市集美區市場監管局第一時間採取微信監管工作群轉發的宣傳形式,督促相關責任單位嚴格落實責任制。聚焦公眾聚集場所使用的特種設備和盛裝極度或高度危害介質、易燃易爆介質的承壓特種設備,採取科所聯動的監管模式,圍繞轄區復工復產企業、已開業的大型商場、樓座較多的居民小區、醫院、地鐵等主要場所加大巡查力度,重點查看在用電梯、鍋爐、液氧儲氣罐等特種設備的檢驗報告、維保記錄、使用單位的安全管理制度、事故應急措施和救援預案等情況。

  泉州市市場監管局組織省特檢院泉州分院和石化中心等兩個特種設備檢驗單位,充分利用特種設備安全監察平台,全面排查受疫情影響需要檢驗的特種設備,主動電話逐家聯繫各使用單位,及時了解復產復工安排,為即將復產復工企業開闢綠色通道,確保企業順利開工。

責任編輯:邊靜

本站聲明:網站內容來源再生能源資訊網http://www.ccn.com.cn/,如有侵權請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

新春走基層·脫貧攻堅一線見聞:八百里瀚海的扶貧之路

  中國消費者報報道(記者李洪濤)噼!啪!清脆的爆竹聲不時在空中炸響。吉林省通榆縣蘇公坨鄉蘇公坨村六撮房屯,這個極具東北特色的小村莊到處散發著濃濃的年味。新春佳節前夕,《中國消費者報》新春走基層的記者跟隨當地市場監管部門的扶貧幹部,冒着零下23攝氏度嚴寒,踏着皚皚白雪,走進幫扶的貧困戶家中送上節日禮物。

  通榆縣地處吉林省西部,這裏常年乾旱少雨,風沙肆虐,自然環境惡劣,因地域廣闊,素有八百里瀚海之稱。該縣蘇公坨鄉蘇公坨村和巨寶山村,是兩個有着535個貧困戶的貧困村。在該縣脫貧攻堅工作中,通榆縣市場監督管理局勇挑重擔,對這兩個村實行包保脫貧。54歲的局黨委辦公室主任徐方樓任職駐村第一書記,如今已經4年。

  1月14日上午,天寒地凍。在駐村扶貧點簡陋的小平房裡,記者見到了面部黝黑、雙手長滿老繭,一身农民打扮的徐書記。

  據徐書記介紹,經過局裡幾年來的幫扶,蘇公坨村和巨寶山村的貧困戶基本上都實現了脫貧,目前,還有兩個因車禍及因病致貧的貧困戶還在积極幫扶中。當日上午,記者跟通榆縣市場監督管理局副局長趙洪亮一起,來到了這兩個貧戶家中進行了走訪。正值新春佳節,細心的扶貧幹部們為貧困戶們精心準備了大紅的燈籠、春聯,還有水果等年貨。雪野茫茫,鄉路彎彎,儘管岔路很多,但開車的食品檢驗檢測中心主任馬立群卻是十分地路熟。他風趣地說:“從春到冬,我們天天下鄉扶貧,路都記在心裏了。”

  當一行人來到蘇公坨村六撮房屯貧困戶白延軍家中時,64歲的劉金環老人正在給躺在炕上的老伴翻身。見到了徐方樓和馬立群,老人激動得連忙下炕,熱情地打着招呼。接過喜氣洋洋的大紅燈籠和寫着“家好人好運氣好,福旺財旺日子旺”的春聯時,她的眼裡噙着淚水。據徐方樓介紹,現年66歲的白延軍是一位退伍老兵。2018年7月30日早晨,他趕着毛驢車去地里幹活時,在村路上不幸被一輛物流公司的大貨車撞傷,雖然經搶救保住了性命,卻成了沒有任何知覺的植物人。由於在賠償上存在爭議,官司還處在人民法院的二審階段。從院里堆放的銹跡斑斑的各種農機具可以看出,在未出車禍前,劉延軍是個勤勞的人,一家人生活也比較富裕。記者在走訪中獲悉,白延軍一家的不幸遭遇,深深地牽動了市場監管部門幹部職工的心。大家踴躍捐款1.36萬元,春耕生產時還送上種子、化肥等生產資料。更重要的是,扶貧幹部們多次到家中看望,鼓勵一家人勇於面對困境,重拾生活信心。

  在巨寶山村巨寶山屯,45歲的农民張波動情地拉着扶貧幹部們連聲道謝。原來,他的女兒張鈺堔患有先天性成骨不全症,脆弱的雙腿稍不留意就會造成骨折,今年15歲了,已經骨折了十幾次。雖然身患重病,坐着輪椅,但小鈺堔聰明伶俐,樂觀向上,已經上了初中二年級的她學習成績優異。為了幫扶張波一家,扶貧幹部們協調有關部門,不僅對他家原有土平房進行了泥草房改造,還在村裡給他安排了一個協警的公益崗位,每年有1萬多元的收入。記者在張波家的牆上,看到貼着《扶貧攻堅幫扶提示板》,上面不僅有《扶貧手冊》,還有包保幹部的姓名和聯繫電話。

  在基層走訪,雖然天氣寒冷,但陽光明媚,空氣清新。歡聲笑語中,記者感受到了扶貧幹部和貧困戶之間濃濃的情意。在蘇公坨村黨支部委員會,一位中年婦女與扶貧幹部杜克峰熱情地打招呼,雙方十分熟識地拉着家常。該中年婦女名叫王艷,是楊樹林村的一名社主任。她告訴記者,她和這些城裡來的扶貧幹部親如兄妹。

  通榆縣是國家級貧困縣,脫貧攻堅任務艱巨。談到扶貧工作時,通榆縣市場監督管理局局長徐立忠說:“我們在扶貧攻堅方面做了很多細緻的工作。”據其介紹,該局對所包保的蘇公坨村和巨寶山村採取多項舉措。去年,倡議、組織愛心企業,為包保村捐款40.4萬元。(蘇公坨村28.5萬元,巨寶山村11.9萬元)。聯手白城市老年科協到蘇公坨村開展義診活動,向貧困群眾免費進行體檢,免費贈送價值1.75萬元的藥品。組織通榆縣益壽堂醫藥有限公司到蘇公坨村開展送醫送葯義診活動,免費提供價值3萬元的藥品。協調通榆縣農業銀行到蘇公坨村送電腦、打印機、紙張等14類辦公用品,價值1.2萬元。

  為了促進貧困人口增收,發展農村庭院經濟,該局給村民們購買了1.4萬元豆角籽。在改善人居環境上,購買2.6萬元的櫥櫃革、鐵絲、1萬根樹軸、7000株花苗。雇傭鏟車、鈎機、叉車、四輪車,對包保的兩村進行了環境衛生整治,美化了生活環境。在危房改造上,為貧困戶購買了1300米的電纜線,飲用水井房電錶一塊。中秋節,為蘇公坨村358戶、巨寶山村177戶貧困戶每戶送2公斤月餅。春節前夕,為兩村535戶貧困戶每戶送去5公斤蘋果、1桶食用油。此外,包保幹部們還自掏腰包,為貧困戶購買電視機、電視天線、玉米種子、輪椅、秧苗、藥品、米面油、食品、兒童玩具、雞雛、電飯鍋、櫥櫃等,积極開展結親、認親和幫親活動。在蘇公坨鄉敬老院,舉辦了以“敬老愛老”為主題的支部黨日活動,為老人們送水果、衣物、涼席等物品,併為老人理了發,打掃了敬老院院內外衛生,把溫暖送到孤寡老人心上,讓老人們感受到了黨的溫暖和關懷。

責任編輯:邊靜

本站聲明:網站內容來源再生能源資訊網http://www.ccn.com.cn/,如有侵權請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

新北清潔公司,居家、辦公、裝潢細清專業服務

一秒看完,2020 最新各縣市電動機車補助總整理

電動機車補助是所有想要購車的朋友最關心的議題,由於各縣市環保局的補助金額不同,常常看得一頭霧水,今年我們一樣整理了這張比較表讓你一眼就能看完,還可以幫你排序找出補助最多的縣市喔。

電動機車補助分為中央與地方兩部分,2020 年的中央補助來自工業局與環保署,不分縣市都能獲得汰舊換新最高 1 萬 2 千元補助,新購電動機車則是 7 千元。

比較麻煩的是,地方政府的補助配合施政方針而有所不同,我們幫各位全部整理在一張表內,這個金額包含了中央與地方政府的補助,讓大家可以快速看清楚,點擊欄位還能自動排序唷。

金門的補助金額從去年 4 月公佈後就從最後一名變成冠軍,今年依然延續高額補助,成為各縣市補助最給力的地方政府。

花蓮台東則是依靠花東基金的補助,而擁有不錯的額度,然而花東基金有名額限制,要獲得補助的朋友需要把握時間申請。

在今年度的補助中,還有一些縣市佛心提供了中低收入戶補助,我們另外整理出列表如下,趕快分享給符合資格的朋友看看吧。

以上是我們為各位整理 2020 年電動機車補助金額的資料,其中未包含交通部提供的 ABS 與 CBS 煞車系統補助(1,000 元),此外值得注意的是,各縣市對於新款七期燃油機車也都有提供相關補助,本表僅供參考,實際購車金額還是要與經銷商確認。

如果想要了解各縣市政府補助金額的細節資料,也可以參考環保署提供的,裡面還有聯絡方式可供確認唷。

(合作媒體:。首圖來源:攝)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

Gogoro 計劃在美推出電動腳踏車「Gogoro Eeyo」,歐洲、台灣夏季登場

Gogoro 醞釀推出的全新服務「Gogoro Eeyo」有了最新消息,從 Gogoro Eeyo 社群帳號顯示,是來自 Gogoro 的電動腳踏車,預計 5 月於美國推出,歐洲、台灣則在夏季登場。

目前 Gogoro 官方已為 Gogoro Eeyo 開設社群帳號如 、、,在介紹中僅說明來自 Gogoro 的電動腳踏車,首發將在 5 月於美國推出,歐洲、台灣則預計在夏季登場,此外還加上表情符號來敘述,Gogoro 將從核心服務的電動機車,拓展到電動腳踏車的新領域。

Gogoro 在電動機車、換電系統、共享機車等領域發展成熟,然而目前針對 Gogoro Eeyo 尚未有更進一步的資訊,像是 Gogoro Eeyo 是自家設計或與他廠合作的電動腳踏車?其電動腳踏車有何特色功能?採用隨車充電還是 Gogoro Network 的電池交換網路?會有如同 GoShare 架構的共享腳踏車服務、或定點租還的「電動版 YouBike」、亦或只單賣電動腳踏車?疫情影響下 Gogoro 又將如何布局美國市場?

而從 Gogoro 向智慧財產局提交的商標資料加以推測,Gogoro Eeyo 外型可能與 Gogoro VIVA 相似,採充電系統而非換電方式;有獨立 App 可以控制,車上配有安全帽,還提供行車記錄的功能。

Gogoro Eeyo 整個產品或服務都令人好奇,筆者相信 Gogoro Eeyo 將讓不少台灣民眾期待,《科技新報》也將為讀者帶來後續報導。

(合作媒體:。首圖來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

新北清潔公司,居家、辦公、裝潢細清專業服務

智慧充電管理軟體真的有效,加州電動交通車隊省下 40% 電費

隨著綠能推展,全球無數新創事業應運而生,宣稱智慧軟體能在能源多元化時代為顧客省錢,也包括電動車隊的智慧充電管理系統,這些系統真能達到宣稱的效益嗎?如今第一波實際使用的成果已逐漸顯現。新創事業 Amply Power 於 2020 年 4 月發表系統應用於北加州康特拉科斯塔郡 Tri Delta 交通車隊電動車的成效,自 2020 年初以來,為車隊節省了 40% 電費。

隨著都市市區環保意識上升,以及各國推動減碳,加上電池降價使得電動車購置成本降低,越來越多公車與交通車隊改用電動車,目前全球有超過 200 家交通車隊採用電動車,並預計到 2025 年電動巴士將占全球交通車隊 30%。

Tri Delta 早在 2018 年就已經開始加入潮流,當時只先測試 4 輛電動車,2 輛來自比亞迪、2 輛來自加州電動巴士廠 Proterra,即使只是先測試 4 輛,對車隊的後勤作業就造成相當大的改變。少了 4 輛車需要柴油與一般引擎車的維修,但多出與電力公司交涉、升級變電器、安裝高壓電力裝置等任務,僅 4 輛車就導致最高電力需求負載高達 300 千瓦,這下突然得處理很多過去不曾想過的電力節費問題。

於是 2019 年底 Tri Delta 決定採用 Amply Power 的智慧充電管理軟體,由軟體管理充電時間,挑選電費較低的離峰時間充電,以節省電費,但又同時確保要用車的時候電力有充飽,車隊後勤人員不再需要思考何時插上充電座比較省錢,讓軟體決定就好了。此外,改採電動車之後,最大的困擾就是一旦充電沒有插好,等到隔天要用車,車子沒電才發現,就會造成調度嚴重問題,使用充電管理軟體後,充電若沒插好,軟體會發出警告,一勞永逸解決了這個防呆問題。

充電管理結果能否擴大適用還待驗證

使用充電管理軟體的期間,Tri Delta 的電力公司太平洋瓦電(PG&E)調整過尖峰用電時間表,Tri Delta 本身用電變化也讓所屬費率區間有變動,過去這些都會造成負責充電的員工傷透腦筋,每週的最佳充電時間都不同,一不小心就讓公司承受高額電費,這些變動更顯出充電管理軟體的重要性,充電管理軟體會自動依據電力公司的時間表與公式調整,算出最划算的充電時間。

經過幾個月使用下來,Tri Delta 節省了高達 40% 電費支出,這還只是第一季,進入夏季後,尖峰用電費率落差更大,會讓充電管理的效益更明顯。

不過,這僅是 4 輛電動車的充電管理結果,能否擴大適用到上百台規模的大車隊,尚需進一步驗證。不過越大的車隊,原理上來說,充電管理能達到的效益會更顯著,不僅節省電費更多,軟體最佳化分配車輛充電的時間,更可以讓硬體投資也跟著減少,例如設置較少充電座,或讓電力設備不需太大規模升級,節省建設成本與工程時間。

Amply Power 此實證案例,不僅證明充電管理的重要性,為許多管理軟體新創事業開創市場,另一方面,也同時為整個電動車產業打了一劑定心針:電動巴士車隊雖然成本較高,但可仰賴電費比燃料費用便宜來達成經濟效益,如今這商業模式面臨挑戰,因油價在全球新冠病毒疫情影響下降到低點,電動車的費用優勢可能消失,但是,若充電管理能省下 40% 電費,那麼,電動車隊尚可取回一部分競爭優勢。

(合作媒體:。首圖來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

特斯拉要求員工 4/29 復工,加州工廠可能提前恢復生產

特斯拉已通知部分員工,要求 4 月 29 日重返工作崗位,雖然加州超級工廠所在地的公共衛生部門還沒有公告解除和放鬆居家隔離。特斯拉要求員工提前復工是為了 5 月 3 日前準備好恢復生產。

特斯拉加州超級工廠所在地 Fremont 的公共衛生部門仍然沒有解除居家隔離,超級工廠屬於非必要生產製造工廠,僅可維持最基本營運,生產線處於停產狀態。特斯拉計劃在 5 月 4 日恢復生產,但在正式復工前主管已通知部分員工,要求 4 月 29 日到工廠報到,主要是沖壓、油漆業務員工。特斯拉沒有透露提前復工的員工數量。

Fremont 所屬 Alameda 郡新聞發言人 Ray Kelly 表示,目前居家隔離沒有任何調整,預期 5 月 3 日前公共衛生部門會說明,可能延長、放鬆或完全解除。

特斯拉加州工廠在 3 月 19 日接到政府部門通知,必須停止生產,特斯拉沒有第一時間配合政府部門調整生產線,繼續生產了 5 天,法務團隊也持續與政府部門溝通,特斯拉認為電動車生產屬於必要業務,不能因居家隔離停產,同時為員工提供必要的健康保障措施。停產前特斯拉會測量進入工廠的員工體溫,並向部分員工發放口罩。

政府部門強制要求停工後,特斯拉通知所有員工,除必要工作外,所有員工在家上班,部分無法在家工作的員工列為休假,降低員工薪水,並停止與外部承包商臨時性員工合作。

儘管員工對復工非常期待,但工廠環境和作業方式將使降低傳染變得困難。截至 4 月 26 日,Alameda 郡共報告 1,468 例武漢肺炎病例,52 例死亡,特斯拉工廠大部分員工都住在這區。

選擇在 4 月 29 日部分員工提前復工,對特斯拉意義不僅是工廠恢復營運,也是 4 月 29 日發表第一季財報的日子,投資者會很樂見工廠恢復生產。加州超級工廠生產 Model Y、Model 3、Model X、Model S 電動車,據 Credit Suisse 的分析師估計,關閉後特斯拉每週至少虧損 3 億美元。

關於汽車製造公司何時恢復營運、保障員工安全仍有許多爭議,豐田、Volkswagen、Hyundai 等汽車廠商都計劃 5 月初恢復生產,但汽車工人聯合會代表認為,過早恢復生產對員工非常危險。

(合作媒體:。首圖來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

急轉彎!特斯拉取消提前復工,股價由漲轉跌

先前消息傳出,電動車大廠特斯拉(Tesla)要求員工於 29 日返回工作崗位,以便讓加州佛利蒙(Fremont)組裝廠恢復生產。但隨著該廠所在的舊金山灣區六郡宣佈延長居家禁令,特斯拉政策急轉彎,已通知員工無需提前復工。

CNBC 報導,根據特斯拉的內部信件,24 日和週末,特斯拉管理層要求數十名員工於 29 日重返工作崗位,讓佛利蒙廠產線重啟運作。不過,由於舊金山灣區六郡(舊金山、聖克拉拉、聖馬刁、馬林、康特拉哥斯,以及佛利蒙廠所在的阿拉米達郡)27 日宣佈,將「就地避難」(shelter-in-place)令的期限由 5 月 4 日延長至 5 月底,特斯拉隨後也取消本週的復工計畫。

特斯拉人力資源部週一發送內部訊息向員工表示:「按照執行領導團隊的指示,我們將不會在 4 月 29 日星期三恢復工作。請忽略關於本週復工的所有訊息和指示。」

報導指出,特斯拉佛利蒙廠生產 Model S 和 Model X 車型,以及較新的 Model 3 和 Model Y 車型,銷往北美和歐洲市場。位於中國上海的組裝廠,先前也因疫情短暫關閉約兩週,但在當地政府的協助下迅速恢復運作,目前每週營運 6 天。

在佛利蒙廠有望提前復工的利多消息帶動下,27 日特斯拉股價大漲 10.15% 收 798.75 美元,但取消復工的消息公佈後,盤後股價挫跌 2.10% 至 782.00 美元。今年以來,特斯拉股價累計飆漲 90.98%。

《華爾街日報》先前報導,根據特斯拉 4 月 2 日資料,2020 年第一季交車數達 88,400 輛,較去年同期成長 40%,雖然疫情導致整體車市市況不振,但特斯拉仍維持原先銷售目標。

今年初,特斯拉執行長馬斯克(Elon Musk)預估,特斯拉今年電動車銷量將維持強勁成長,比去年至少成長 36%,全球總交車數可望「輕鬆突破」(comfortably exceed)50 萬輛。

特斯拉預計 29 日發表 2020 年第一季財報。

(本文內文由  授權使用;首圖來源: CC BY 2.0)

延伸閱讀:

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※想知道網站建置網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計後台網頁設計

※不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※帶您來看台北網站建置台北網頁設計,各種案例分享

※別再煩惱如何寫文案,掌握八大原則!